Я пытаюсь отправить несколько SMS-сообщений. Мой код:

for (Entry<String, String> entry : book.entrySet()) {
    sendSMS(entry.getValue(), message);
}

Отправить смс:

private void sendSMS(final String phoneNumber, String message) {
        String SENT = "SMS_SENT";
        PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(
                SENT), 0);
        registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context arg0, Intent arg1) {
                switch (getResultCode()) {
                case Activity.RESULT_OK:
                    System.out.println("sent");
                    break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    break;
                case SmsManager.RESULT_ERROR_NO_SERVICE:
                    System.out.println("No network "+ phoneNumber);
                    break;
                case SmsManager.RESULT_ERROR_NULL_PDU:
                    break;
                case SmsManager.RESULT_ERROR_RADIO_OFF:
                    break;
                }
            }
        }, new IntentFilter(SENT));
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phoneNumber, null, message, sentPI, null);
    }

Но дела повторяются несколько раз. Для 4-х контрактов:

  1. Нет сети 123456879
  2. Нет сети 123456879
  3. Нет сети +79206501013
  4. Нет сети 123456879
  5. Нет сети +79206501013
  6. Нет сети +79206501012
  7. Нет сети 123456879
  8. Нет сети +79206501013
  9. Нет сети +79206501012
  10. Нет сети 987654321

Что может быть причиной? Спасибо!

1
NickDevil 23 Янв 2014 в 04:46

1 ответ

Лучший ответ

Я думаю, что перемещение registerReceiver (...) за пределы sendSMS решит эту проблему. Похоже, это случай множественных регистраций.

Попробуйте что-то вроде этого

Intent smsSentIntent = new Intent(SENT);
smsSentIntent.setClass(context, SmsSentBroadcastReceiver.class);
2
PVS 23 Янв 2014 в 06:43
Спасибо! А можно привести пример SmsSentBroadcastReceiver.class?
 – 
NickDevil
23 Янв 2014 в 14:14
Это любой BroadcastReceiver, который вы хотите обработать намерением SMS_SENT. Вы можете использовать код в вашем registerReceiver (...), просто поместив его в отдельный класс.
 – 
PVS
23 Янв 2014 в 17:02
Офс! Но пока я не могу поднять репутацию (извините
 – 
NickDevil
24 Янв 2014 в 00:28
Идеально! Спасибо :)
 – 
Vivek Solanki
4 Апр 2017 в 17:25