Я разрабатываю приложение, в котором я отправляю SMS, и мне нужно узнать, доставлено ли оно или нет. Кажется, все хорошо, если я посылаю сообщение человеку.
Но в некоторых ситуациях я получил неправильную информацию, например, сначала я отправляю сообщение на номер 0000 (но оно не будет доставлено), а после этого я отправляю сообщение на номер 0001 и оно доставляется (сообщение на 0000 все еще не доставлено), но Я получил тост: смс доставлено на 0000 (но доставлено только сообщение на 0001). Что мне делать, чтобы исправить этот конфликт в отчетах о доставке?
Вот мой код:
try {
SmsManager smsManager = SmsManager.getDefault();
String to = "5556";
String body = "Test Message";
String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED).putExtra("senderNumber", to), 0);
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Toast.makeText(arg0, "SMS sent", Toast.LENGTH_LONG).show();
break;
default:
Toast.makeText(arg0, "Error", Toast.LENGTH_LONG).show();
break;
}
}
}, new IntentFilter(SENT));
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode()) {
case Activity.RESULT_OK:
String s = arg1.getStringExtra("senderNumber");
Toast.makeText(getBaseContext(), "SMS delivered to " + s, Toast.LENGTH_LONG).show();
break;
default:
Toast.makeText(getBaseContext(), "SMS not delivered", Toast.LENGTH_LONG).show();
break;
}
}
}, new IntentFilter(DELIVERED));
smsManager.sendTextMessage(to.getText().toString(), null, body.getText().toString(), sentPI, deliveredPI);
}
catch (Exception ex) {
Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show();
}
Обновление:
Я обнаружил, что если я добавлю уникальный идентификатор в действие Intent (DELIVERED + id), все будет в порядке и не будет конфликта. но я не регистрирую Receiver при создании сообщения, для этого я использую файл манифеста:
<receiver android:name=".SendBroadcastReceiver" >
<intent-filter>
<action android:name="com.example.myapp.SMS_SENT" />
<action android:name="com.example.myapp.SMS_DELIVERED" />
</intent-filter>
</receiver>
А также класс Receiver с именем SendBroadcastReceiver для обработки доставки sms.
Если я добавлю уникальный идентификатор в действие, как я могу добавить их в файл манифеста?