#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