Попытка идентифицировать подтверждение доставки SMS
В настоящее время я пытаюсь получить подтверждение для каждого отправленного SMS. Я должен быть уверен, что мои смс отправлены, поэтому я использовалBroadCastReceived
чтобы получить информацию:
Intent sentIntent = new Intent(SMS_SEND);
sentIntent.putExtra("key", idSms);
PendingIntent sentPI = PendingIntent.getBroadcast(getApplicationContext(), 0, sentIntent, PendingIntent.FLAG_UPDATE_CURRENT);
SmsManager manager = SmsManager.getDefault();
try{
manager.sendTextMessage(exp, null, sms, sentPI, null);
put("sending " + sms); //Just a method to print in a textview use has a console
} catch (IllegalArgumentException e){
put("Exception " + e.getMessage());
}
и использовать приемник вещания, как это
public void onReceive(Context context, Intent intent){
String idsms = intent.getExtras().getString("key");
switch (getResultCode()) {
case Activity.RESULT_OK:
put("ACK : #" + idsms);
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
case SmsManager.RESULT_ERROR_RADIO_OFF:
case SmsManager.RESULT_ERROR_NULL_PDU:
case SmsManager.RESULT_ERROR_NO_SERVICE:
put("BOOM " + getResultCode() + "\n\tfrom sms #" + idsms);
break;
}
}
Это работает как талисман, пока я не попытаюсь отправить несколько сообщений одновременно, дополнительный прием всегда происходит от последней отправки SMS, поэтому я не могу определить, какой текст отправляется, а какой нет.
Вот простой пример того, что произойдет.
Когда я использую цикл для отправки 3sms:
id: 1, сообщение: SMS 1
id: 2, сообщение: SMS 2
id: 3, сообщение: SMS 3
И полученный получит:
ACK: № 3
ACK: № 3
ACK: № 3
Я понимаю, что это происходит из PendingIntent.FLAG_UPDATE_CURRENT, но я не могу найти решение. Любой может объяснить мне, как я должен использовать PendingIntent.getBroadcast (..), чтобы справиться с этим или, по крайней мере, поставить меня на правильный путь.