2013-05-05 32 views
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);} 
} 
+1

註冊一個匿名的BroadcastReceiver是一件壞事,因爲您以後無法取消註冊並導致內存泄漏。 – Egor 2013-05-05 20:00:46

+0

最好的是我需要爲我的廣播接收器創建一個新類。你能否舉例說明你指的是什麼? – mboy 2013-05-05 20:18:57

+0

不一定,您可以將BroadcastReceiver作爲類中的一個字段保留,其想法是,您應該能夠在稍後通過對此BroadcastReceiver的引用來調用unregisterReceiver()。 – Egor 2013-05-06 06:27:22

回答

0

現在這是解決我修改了我的意圖掛起後。請求代碼必須是唯一的,並且我還添加了此PendingIntent.FLAG_CANCEL_CURRENT以取消當前意圖,或者您可以更新當前意圖。

PendingIntent sentPI = PendingIntent.getBroadcast(MyApplication.getAppContext(),smsID++,intentExtra, PendingIntent.FLAG_CANCEL_CURRENT);