Как дождаться подтверждения отправки sms, а затем отправить следующее sms Android

#java #android

#java #Android

Вопрос:

Мне пришлось отправить 5-10 сообщений с помощью,

  SmsManager smsManager= SmsManager.getDefault();
                smsManager.sendTextMessage(phoneNo,null,messageTosend,null,null);
  

но условие таково, что мне нужно подтвердить успешную отправку каждого сообщения, чтобы я мог продолжить отправку остальных сообщений и так далее, пока все.
Я знаю, как добиться успеха с помощью широковещательного приемника, но не знаю, как приостановить дальнейшую отправку сообщений до широковещательного уведомления.

  final BroadcastReceiver sendSMS = new BroadcastReceiver() {
                @Override
                public void onReceive(Context arg0, Intent arg1) {
                    switch (getResultCode()) {
                        case Activity.RESULT_OK:
                            break;
                        case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                            Toast.makeText(getContext(), "Generic failure",
                                    Toast.LENGTH_SHORT).show();
                            break;
                        case SmsManager.RESULT_ERROR_NO_SERVICE:
                            Toast.makeText(getContext(), "No service",
                                    Toast.LENGTH_SHORT).show();
                            break;
                        case SmsManager.RESULT_ERROR_NULL_PDU:
                            Toast.makeText(getContext(), "Null PDU",
                                    Toast.LENGTH_SHORT).show();
                            break;
                        case SmsManager.RESULT_ERROR_RADIO_OFF:
                            Toast.makeText(getContext(), "Radio off",
                                    Toast.LENGTH_SHORT).show();
                            break;
                    }
                }
            };
  

Как приостановить выполнение кода sendsms до тех пор, пока первая отправка sms не будет успешной?

Комментарии:

1. Разместите свой вызов на sentTextMessage() в случае OK вашего получателя

2. обстоятельства таковы, что я не могу этого сделать, потому что эти сообщения недоступны во внутреннем классе и по другим вопросам

3. @vincrichaud будет ли этот широковещательный приемник прослушивать сообщение, которое я отправил из своего приложения, или оно также может быть запущено в другом приложении, которое также отправляет sms?

Ответ №1:

 private boolean isChecked = true;
final BroadcastReceiver sendSMS = new BroadcastReceiver() {
                @Override
                public void onReceive(Context arg0, Intent arg1) {
                    while(isChecked == true){
                    switch (getResultCode()) {
                        case Activity.RESULT_OK:
                            break;
                        case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                            Toast.makeText(getContext(), "Generic failure",
                                    Toast.LENGTH_SHORT).show();
                            isChecked = false;
                            break;
                        case SmsManager.RESULT_ERROR_NO_SERVICE:
                            Toast.makeText(getContext(), "No service",
                                    Toast.LENGTH_SHORT).show();
                            isChecked = false;
                            break;
                        case SmsManager.RESULT_ERROR_NULL_PDU:
                            Toast.makeText(getContext(), "Null PDU",
                                    Toast.LENGTH_SHORT).show();
                            isChecked = false;
                            break;
                        case SmsManager.RESULT_ERROR_RADIO_OFF:
                            Toast.makeText(getContext(), "Radio off",
                                    Toast.LENGTH_SHORT).show();
                            isChecked = false;
                            break;
                    }
                    }
                }
            };
  

Создайте время для проверки, правильно ли сообщение, и вы хотите продолжить, или оно ложное.

Комментарии:

1. Я думаю, мне придется сделать это в отдельном потоке, отличном от основного потока пользовательского интерфейса, поскольку цикл while заблокирует выполнение и может произойти сбой приложения. Что вы скажете?

2. Я попробовал это решение. Это хорошо, но с этим есть проблема. Широковещательный приемник запускается только для одного sms. Мне нужно продлить срок его службы, как это сделать? Все, что я хочу сказать, это то, что код получателя запускается один раз, но мне нужно отправить 100 сообщений

3. проблема решена, я повторно зарегистрировал широковещательный приемник рекурсивным способом в OK of switch