@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"
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы