2
我試圖捕捉每個短信傳遞的狀態,但我的代碼沒有得到它,而是隻有一個消息的狀態。無法捕捉每個短信狀態
任何人都可以給提示? 這是我的代碼..這是工作,但我需要捕捉每個短信的每個狀態。
public void sendMultipart(String msgbody,String msg_receipients,Intent intent)
{
BroadcastReceiver smsStatusReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
context.unregisterReceiver(this); //unregister receiver
switch (getResultCode())
{
case Activity.RESULT_OK:
Logger.logtoFile(tag,"RESULT_OK "+intent.getStringExtra("num"),1);
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Logger.logtoFile(tag,"RESULT_ERROR_GENERIC_FAILURE "+intent.getStringExtra("num"),1);
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Logger.logtoFile(tag,"RESULT_ERROR_NO_SERVICE "+intent.getStringExtra("num"),1);
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Logger.logtoFile(tag,"RESULT_ERROR_RADIO_OFF "+intent.getStringExtra("num"),1);
break;
}
}
};
IntentFilter intentFilter = new IntentFilter("sent");
MyApplication.getAppContext().registerReceiver(smsStatusReceiver, intentFilter);
Intent intent1 = new Intent("sent");
intent1.putExtra("num", msg_receipients);
SmsManager sms = SmsManager.getDefault();
try
{
ArrayList<String> messages = sms.divideMessage(msgbody); //Divide msg into chunk
ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>(messages.size());
for (int j = 0; j < messages.size(); j++)
sentIntents.add(PendingIntent.getBroadcast(MyApplication.getAppContext(), 0, intent1, 0));
sms.sendMultipartTextMessage(msg_receipients, null, messages, sentIntents, null);
}catch(IllegalArgumentException e)
{Logger.logtoFile(tag, "SMS sender error "+e.toString(), 2);}
catch(Exception l)
{Logger.logtoFile(tag, l.toString(), 2);}
}
註冊一個匿名的BroadcastReceiver是一件壞事,因爲您以後無法取消註冊並導致內存泄漏。 – Egor 2013-05-05 20:00:46
最好的是我需要爲我的廣播接收器創建一個新類。你能否舉例說明你指的是什麼? – mboy 2013-05-05 20:18:57
不一定,您可以將BroadcastReceiver作爲類中的一個字段保留,其想法是,您應該能夠在稍後通過對此BroadcastReceiver的引用來調用unregisterReceiver()。 – Egor 2013-05-06 06:27:22