2013-09-21 228 views
0

即使我使用abortBroadcast(),我的廣播接收器截獲的短信正在發送到我的收件箱。這個問題只在我使用unRegisterReceiver()時纔會出現。如果我不取消註冊,abortBroadcast可以正常工作。任何想法如何中止,然後取消註冊成功?下面是代碼:取消註冊已接收短信的廣播接收器

在我的主要活動中,我已經宣佈的廣播接收器對象:

SmsReceiver BR_smsreceiver = null; 

然後我註冊的廣播接收器,並在主要活動的函數內發送短信:

public Boolean sendVerificationSms(String number) { 
BR_smsreceiver = null; 
BR_smsreceiver = new SmsReceiver(); 
BR_smsreceiver.setMainActivityHandler(this); 
IntentFilter fltr_smsreceived = new IntentFilter(
     "android.provider.Telephony.SMS_RECEIVED"); 
registerReceiver(BR_smsreceiver, fltr_smsreceived); 

SmsManager sms = SmsManager.getDefault(); 
sms.sendTextMessage(number, null, "hi", null, null); 
} 

廣播接收機截取SMS和主活動中調用一個函數:

public class SmsReceiver extends BroadcastReceiver { 

    MainActivity main = null; 

    void setMainActivityHandler(MainActivity main){ 
     this.main=main; 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle pdusBundle = intent.getExtras(); 
     Object[] pdus=(Object[])pdusBundle.get("pdus"); 
     SmsMessage messages=SmsMessage.createFromPdu((byte[]) pdus[0]); 
     if(messages.getMessageBody().contains("hi")){ 
      abortBroadcast(); 
      main.verifyPhoneNumber("hi"); 

     } 

    } 
} 

功能註銷廣播接收器,並進行一些處理:

public void verifyPhoneNumber(String number) { 
     unregisterReceiver(BR_smsreceiver); 
     ... 
} 

回答

1

一個解決方案,工作使用延遲(甚至是0毫秒的工作!)用於註銷:

new Handler().postDelayed(new Runnable(){ 
      public void run(){ 
       unregisterReceiver(BR_smsreceiver); 
      } 
     },0); 
0
public void onPause() { 
     // TODO Auto-generated method stub 
     unregisterReceiver(BR_smsreceiver); 
    } 
+0

此止跌」 t服務於我的目的,因爲我需要在廣播接收器被觸發後取消註冊,而不是在應用程序暫停後註銷。 – faizal