В моем приложении мне нужно отправить SMS, поэтому я использую следующий код
final String SMS_REQUEST_OK = "SMS_REQUEST_OK";
String m_sms_message = String.format("sample text");
String m_dest_number = "some number";
Intent SMSInfo = new Intent(SMS_REQUEST_OK);
SMSInfo.putExtra("msg", m_sms_message);
SMSInfo.putExtra("num", m_dest_number );
PendingIntent sentPI = PendingIntent.getBroadcast(m_context, 0,
SMSInfo, PendingIntent.FLAG_CANCEL_CURRENT);
m_context.registerReceiver(new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode()){
case Activity.RESULT_OK:
Toast.makeText(m_context, String.format(
m_context.getResources().getString(R.string.sms_success),
arg1.getExtras().getString("msg"),
arg1.getExtras().getString("num")),
Toast.LENGTH_LONG).show();
break;
default:
Toast.makeText(m_context, String.format(
m_context.getResources().getString(R.string.sms_error),
arg1.getExtras().getString("msg"),
arg1.getExtras().getString("num")),
Toast.LENGTH_LONG).show();
break;
}
}
}, new IntentFilter(SMS_REQUEST_OK));
SmsManager.getDefault().sendTextMessage(
m_dest_number,
null,
m_sms_message,
sentPI,
null);
Я ожидаю, что он попытается отправить SMS один раз, а затем покажет сообщение Toast с результатом этой операции.Он работает нормально, если SMS отправлено успешно, однако, если это не так, он продолжает повторять попытку отправки, судя по множеству сообщений Toast (это происходит в HTC Desire (S), тестирование его на Samsung не приводит к такому поведению - Тост с ошибкой)показывается один раз).Итак, как SmsManager
должен себя вести и как этого избежать (чтобы попытаться отправить СМС только один раз)?
edit Я забыл упомянуть - это происходит, если getResultCode()
возвращает 133404, не проверял его на других ошибках
edit2 Согласно this , 133404
является ошибкой, характерной для htc, что означает временный сбой, и устройство выполнит повторную попытку автоматически, пока, в конце концов, не будет получен правильный код результата и не будет передана широковещательная рассылка.Тем не менее, в течение приемлемого времени не будет получено никакого документированного SmsManager вещания.Таким образом, остается вопрос - есть ли способ остановить попытки повторной попытки?