Я хочу отправить нескольким получателям. Я также хочу использовать встроенный механизм SMS без запроса необходимого приложения (Whatsapp и т. д.)
Для этого я использую Android SmsManager.
Цикл for перебирает массив мобильных номеров mobileList и отправляет SMS на каждый из них, один за другим.
Индикация для доставленного SMS извлекается BroadcastReceiver для намерения DeliverActionIntent.
Я выдвигаю тост со словом «Доставлено» и порядковым номером доставляемого сообщения.
Мои вопросы:
Фактический индекс (idx) не отображается. Я получаю для всех тостов один и тот же номер индекса, который является количеством элементов мобильного списка. Почему это происходит? Я ожидал индекс для каждого мобильного телефона сам по себе.
Ограничено ли количество элементов mobileList? Могу ли я иметь 200 человек, например?
Я проверил это на списке из 4 мобильных номеров, но потом получил 8-10 тостов. Я ожидал один тост за одну мобильную доставку. Что здесь не так?
Как я могу получить уведомление, когда все SMS доставлены? Я предполагаю, что это должно быть фоновое действие, такое как AsyncTask. Может кто-нибудь показать мне, как это сделать?
Код SmsManager показан ниже.
SmsManager smsManager = SmsManager.getDefault();
for(idx = 0; idx < mobileList.length; idx++) {
String toNumber = mobileList[idx];
String sms = message;
// SMS sent pending intent
Intent sentActionIntent = new Intent(SENT_ACTION);
sentActionIntent.putExtra(EXTRA_IDX, idx);
sentActionIntent.putExtra(EXTRA_TONUMBER, toNumber);
sentActionIntent.putExtra(EXTRA_SMS, sms);
PendingIntent sentPendingIntent = PendingIntent.getBroadcast(this, 0, sentActionIntent, PendingIntent.FLAG_UPDATE_CURRENT);
/* Register for SMS send action */
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String result = "";
switch (getResultCode()) {
case Activity.RESULT_OK:
result = "Transmission successful";
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
result = "Transmission failed";
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
result = "Radio off";
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
result = "No PDU defined";
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
result = "No service";
break;
}
// Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();
}
}, new IntentFilter(SENT_ACTION));
// SMS delivered pending intent
Intent deliveredActionIntent = new Intent(DELIVERED_ACTION);
deliveredActionIntent.putExtra(EXTRA_IDX, idx);
deliveredActionIntent.putExtra(EXTRA_TONUMBER, toNumber);
deliveredActionIntent.putExtra(EXTRA_SMS, sms);
PendingIntent deliveredPendingIntent = PendingIntent.getBroadcast(this, 0, deliveredActionIntent, PendingIntent.FLAG_UPDATE_CURRENT);
/* Register for Delivery event */
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(getApplicationContext(), "Deliverd " + Integer.toString(idx), Toast.LENGTH_SHORT).show();
}
}, new IntentFilter(DELIVERED_ACTION));
//send
smsManager.sendTextMessage(toNumber, null, sms, sentPendingIntent, deliveredPendingIntent);
}