Я хочу передать некоторые данные на BroadcastReceiver
при отправке большого количества SMS, чтобы указать, какое сообщение отправлено / доставлено.
Я пытался использовать стандарт PendingIntent
с разными флагами, но получил неправильные результаты (BroadcastReceiver всегда получает первые / последние дополнения намерения). Кто-нибудь знает, как передать данные на BroadcastReceiver
при отправке SMS-сообщения с использованием SmsManager
?
Функция отправки SMS:
private void sendSMS(SmsRequest _smsRequest) {
Intent sentInt = new Intent(Long.toString(System.currentTimeMillis()));
sentInt.putExtra("SMS_ID", _smsRequest.getmId());
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, sentInt, 0);
Intent delivInt = new Intent(Long.toString(System.currentTimeMillis()));
delivInt.putExtra("SMS_ID", _smsRequest.getmId());
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, delivInt, 0);
registerReceiver(sendBroadcastReceiver, new IntentFilter(SENT));
registerReceiver(deliveryBroadcastReceiver, new IntentFilter(DELIVERED));
SmsManager
.getSmsManagerForSubscriptionId(1)
.sendTextMessage(_smsRequest.getmRecipientNumber(),
null,
_smsRequest.getmMessage(),
sentPI,
deliveredPI);
}
Мой BroadcastReceiver
класс:
public class DeliveryReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Log.d("sms", "Broadcast received: " + intent.getAction());
Log.d("sms" ,"Sms was delivered" + intent.getIntExtra("SMS_ID", -1));
break;
case Activity.RESULT_CANCELED:
Log.d("sms" ,"Sms was not delivered");
break;
}
}
}
sendSms()
звонит много раз один за другим, и в журналах я получаю много полученных трансляций, как и должно быть, но только с первым SMS_ID
SMS-сообщением.
Пожалуйста, помогите мне!