2013-06-21 137 views
2

我正在做SMS發送功能。我正在使用匿名廣播接收器進行註冊。現在我得到Exception來取消註冊。取消註冊匿名BroadCastReceiver

下面是我的代碼:

public class SMSUtility 
{ 
public static void sendSMS(final Context context, String phoneNumber, String message) 
{ 
    MobiculeLogger.showInfoLog("SMS UTILITY", "Inside sendSMS"); 
    String SENT = "SMS_SENT"; 
    String DELIVERED = "SMS_DELIVERED"; 

    PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, new Intent(SENT), 0); 

    PendingIntent deliveredPI = PendingIntent.getBroadcast(context, 0, new Intent(DELIVERED), 0); 




    // ---when the SMS has been sent--- 
    context.registerReceiver(new BroadcastReceiver() 
    { 
     @Override 
     public void onReceive(Context arg0, Intent arg1) 
     { 
      switch (getResultCode()) 
      { 
       case Activity.RESULT_OK: 
        Toast.makeText(context, "SMS sent", Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
        Toast.makeText(context, "Generic failure", Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_NO_SERVICE: 
        Toast.makeText(context, "No service", Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_NULL_PDU: 
        Toast.makeText(context, "Null PDU", Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_RADIO_OFF: 
        Toast.makeText(context, "Radio off", Toast.LENGTH_SHORT).show(); 
        break; 
      } 
     } 
    }, new IntentFilter(SENT)); 

    // ---when the SMS has been delivered--- 
    context.registerReceiver(new BroadcastReceiver() 
    { 
     @Override 
     public void onReceive(Context arg0, Intent arg1) 
     { 
      switch (getResultCode()) 
      { 
       case Activity.RESULT_OK: 
        Toast.makeText(context, "SMS delivered", Toast.LENGTH_SHORT).show(); 
        break; 
       case Activity.RESULT_CANCELED: 
        Toast.makeText(context, "SMS not delivered", Toast.LENGTH_SHORT).show(); 
        break; 
      } 
     } 
    }, new IntentFilter(DELIVERED)); 



    SmsManager sms = SmsManager.getDefault(); 
    MobiculeLogger.showInfoLog("SMSUTILITY ", "SMS = "+sms.toString()); 
    sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); 
    MobiculeLogger.showInfoLog("SMSUTILITY ", "SEND TEXT MESSAGE phone number= "+phoneNumber+" message ="+message); 


} 
} 

回答

1

使用像

BroadCastReceiver r = new BroadcastReceiver() 
{ 
    @Override 
    public void onReceive(Context arg0, Intent arg1) 
    { 
     switch (getResultCode()) 
     { 
      case Activity.RESULT_OK: 
       Toast.makeText(context, "SMS delivered", Toast.LENGTH_SHORT).show(); 
       break; 
      case Activity.RESULT_CANCELED: 
       Toast.makeText(context, "SMS not delivered", Toast.LENGTH_SHORT).show(); 
       break; 
     } 
    } 
}; 

使用

context.registerReceiver(r, new IntentFilter(DELIVERED)); 

註銷使用

寄存器
+0

如何註銷(即) – user2449062

+0

之後如果您在ondestroy中註冊註銷註銷。如果你在onresume註冊在註銷。 – stinepike

+0

但我把它寫在非活動課上 – user2449062