@math_man

Как отлавливать отчеты о доставке СМС Андрооид?

Если я в цикле отправлю 100 сообщений подряд, мне потом начнут приходить отчеты о доставке. Каким образом я узнаю кто из получателей действительно получил номер, а кто - нет?

Может нужно внести изменения в фрагмент кода?
public void sendSMS(String phone, String text, final String id){
        String SENT="SMS_SENT";
        String DELIVERED="SMS_DELIVERED";
        PendingIntent sentPI= PendingIntent.getBroadcast(getBaseContext(),0,
                new Intent(SENT),0);

        PendingIntent deliveredPI= PendingIntent.getBroadcast(getBaseContext(),0,
                new Intent(DELIVERED),0);
        registerReceiver(new BroadcastReceiver(){
            @Override
            public void onReceive(Context arg0, Intent arg1){
                switch(getResultCode())
                {
                    case Activity.RESULT_OK:
                        setStatus(id, "2");
                        Account.sent++;
                        break;
                    case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                        break;
                    case SmsManager.RESULT_ERROR_NO_SERVICE:
                        break;
                    case SmsManager.RESULT_ERROR_NULL_PDU:
                        break;
                    case SmsManager.RESULT_ERROR_RADIO_OFF:
                        break;
                }
            }
        },new IntentFilter(SENT));
        registerReceiver(new BroadcastReceiver(){
            @Override
            public void onReceive(Context arg0, Intent arg1){
                switch(getResultCode())
                {
                    case Activity.RESULT_OK:{
                        setStatus(id, "3");
                        Account.get++;
                        //Account.list.remove(this);
                        break;
                    }

                    case Activity.RESULT_CANCELED:{
                        setStatus(id, "4");
                        Account.notGet++;
                        //Account.list.remove(this);
                        break;
                    }

                }
            }
        },new IntentFilter(DELIVERED));
        
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phoneNo,null, message, sentPI, deliveredPI);
    }
  • Вопрос задан
  • 332 просмотра
Решения вопроса 1
Rou1997
@Rou1997
Возможно, вот в этом Intent arg1 будет специальная extra с данными, см. документацию, хотя вряд ли. Но и без этого задача элементарная, раз вы передаете оба sentPI в sendTextMessage то они будут соответствовать, остается только в анонимный класс передать поле, это делается так:
final String num = ...;
...
        registerReceiver(new BroadcastReceiver(){
...
//переменная num доступна

Остальное компилятор сделает сам.
Другой вариант, вместо анонимного класса создать просто внутренний класс, в конструктор добавить параметр.
Или третий, "класть" анонимный класс в переменную, в самом нем объявить публичное поле, задавать это поле, а уже затем registerReceiver.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@peacemakerv
Разработка под Android
У вас скорее всего не выйдет отправить столько SMS так быстро. Погуглите "GENERAL FAILURE SMS error"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы