我一直在開發一個發送短信的應用程序。我遇到的問題是sendTextMessage方法發送兩個具有相同內容的消息。我如何解決這個問題?Android sendTextMessage在exceution上發送兩條相同的消息
該類啓動過程
public class C2DMMessageReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//Some stuff
Log.i("C2DMMessageReceiver", "Got C2DM message");
SmsSend message = new SmsSend(context, phonenumber, line);
message.send()
}
}
類發送短信
public class SmsSend {
SmsSend(Context tcontext, String phoneNumber, String smstext){
context = tcontext;
phone_number = phoneNumber;
message = smstext;
}
protected void send(){
if(foo){
Log.i("SmsSend", "Sending message");
SmsManager sms = SmsManager.getDefault();
String sent = "android.telephony.SmsManager.STATUS_ON_ICC_SENT";
PendingIntent piSent = PendingIntent.getBroadcast(context, 0, new Intent(sent), 0);
sms.sendTextMessage(phone_number, null, message, piSent, null);
}
}
}
類來找出什麼happining
public class SmsSentBroadcastReciever extends BroadcastReceiver{
private static final String TAG = "SmsSentBroadcastReciever";
@Override
public void onReceive(Context context, Intent intent) {
switch (getResultCode()){
case Activity.RESULT_OK:
Log.i(TAG,"SMS sent");
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Log.e(TAG,"Generic failure");
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Log.e(TAG,"No service");
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
Log.e(TAG,"PDU NULL");
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Log.e(TAG,"Radio off");
break;
}
}
}
從logcat的輸出是
了C2DM消息
發送消息
短信發送
短信發送
所以sendTextMessage僅觸發一次,但它仍然拋出兩個消息。該怎麼辦?
我正在調試的設備是Android 4.0的三星Galaxy S2。我閱讀了一些老的線程,sendTextMessage在某些(HTC)設備上壞了,所以我嘗試了sendMultipartTextMessage,但它給出了相同的結果。
嘗試打印您在SmsSentBroadcastReciever得到的意圖。也許你得到超出你的預期 – zapl 2012-03-14 16:51:39
我只是得到2倍意圖{act = android.telephony.SmsManager.STATUS_ON_ICC_SENT flg = 0x10 cmp = com.my.android.app.thisapp /。SmsSentBroadcastReciever} – daker 2012-03-14 17:13:04
如果刪除PendingIntent會發生什麼?也許'SmsManager'會發送廣播以及你指定的Intent。 – zapl 2012-03-14 17:17:55