2013-03-30 31 views
0

我試圖在我的應用成功發送短信時收到通知。我使用BroadcastReceiver作爲通知。我在onResume()註冊並取消註冊onPause()。但即使短信已發出,它也不會通知。我在BroadcastReceiver循環中設置了斷點,並沒有任何通知。可能是什麼問題呢? 我的代碼如下。BroadcastReceiver通知

@Override 
public void onResume() { 
    super.onResume(); 

    //---create the BroadcastReceiver when the SMS is sent--- 
    smsSentReceiver = new BroadcastReceiver(){ 
     @Override 
     public void onReceive(Context arg0, Intent arg1) { 

      switch (getResultCode()) 
      { 
       case Activity.RESULT_OK: 
        Toast.makeText(getBaseContext(), "SMS sent", 
         Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
        Toast.makeText(getBaseContext(), "Generic failure", 
         Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_NO_SERVICE: 
        Toast.makeText(getBaseContext(), "No service", 
         Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_NULL_PDU: 
        Toast.makeText(getBaseContext(), "Null PDU", 
         Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_RADIO_OFF: 
        Toast.makeText(getBaseContext(), "Radio off", 
         Toast.LENGTH_SHORT).show(); 
        break; 
      } 
     } 
    }; 

    //---create the BroadcastReceiver when the SMS is delivered--- 
    smsDeliveredReceiver = new BroadcastReceiver(){ 
     @Override 
     public void onReceive(Context arg0, Intent arg1) { 
      switch (getResultCode()) 
      { 
       case Activity.RESULT_OK: 
        Toast.makeText(getBaseContext(), "SMS delivered", 
         Toast.LENGTH_SHORT).show(); 
        break; 
       case Activity.RESULT_CANCELED: 
        Toast.makeText(getBaseContext(), "SMS not delivered", 
         Toast.LENGTH_SHORT).show(); 
        break; 
      } 
     } 
    }; 

    //---register the two BroadcastReceivers--- 
    registerReceiver(smsSentReceiver, new IntentFilter(SENT)); 
    registerReceiver(smsDeliveredReceiver, new IntentFilter(DELIVERED));  
} 

@Override 
public void onPause() { 
    super.onPause(); 
    //---unregister the two BroadcastReceivers--- 
    unregisterReceiver(smsSentReceiver); 
    unregisterReceiver(smsDeliveredReceiver);   
} 
+0

而不是onPause()方法註銷Rece在onDestroy()中的iver,請參閱http://stackoverflow.com/q/4805269/2147039 – Raynold

回答

1

我不確定您的用例。文檔建議您在onPause中取消註冊接收者,但如果在應用程序處於後臺時發送,則您將錯過該意圖。 如果你想在後臺接收意圖,你有兩種選擇:

  1. 有一個服務運行,並在那裏註冊接收器。
  2. 如果可能,您可以在清單中註冊廣播接收器。

document

注意:如果您的Activity.onResume()實現註冊接收器,您應該註銷它Activity.onPause()。 (暫停時不會收到意圖,這將減少不必要的系統開銷)。

還要確保你沒有在操作字符串(「android.provider.Telephony.SMS_RECEIVED」)任何錯字,並有正確的權限(「android.permission.RECEIVE_SMS」)。

編輯請參閱(尤其是CommonsWare的答案)

What is the Android sent sms intent?

Android Broadcast Receiver for Sent SMS messages?

「沒有意圖是廣播時的Android發送短信,這可能是出於保護隱私儘可能多作爲其他任何東西「... ... CommonsWare

+0

SMS_RECEIVED toast正常運行。 SMS_SEND烤麪包不起作用。短信發送正常,只是沒有通知通知。我在public void onReceive(Context arg0,Intent arg1)上放置了一個斷點;但從未達到轉折點。 – Bryanyan

+0

請參閱http://stackoverflow.com/questions/4116330/what-is-the-android-sent-sms-intent..."AFAIK,當Android發送短信時沒有Intent廣播。出於隱私的原因和其他任何事情一樣。「 – pt2121

+0

您是否在使用您的自定義意圖? – pt2121

相關問題