2011-08-18 44 views
1

我正在構建一個Android應用程序,它通過向用戶提供短信提供信息。用戶將短信發送到APP中硬編碼的預定號碼,並接收響應。在Android中動態創建BroadcastReciever

要達致這,我使用的是廣播Reciever在我的Android清單

<receiver android:name=".SMSReciever"> 
     <intent-filter android:priority="2"> 
      <action android:name= 
       "android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 

如果我創建一個新的類SMSReciever,那麼當一個反應是收到,我會以某種方式將信息發送回用戶在屏幕上打開的活動。是否有可能我可以在我的主要活動中動態執行此操作,以便可以使應用程序更具交互性?

我已經瞭解了Context.registerReciever方法,但我如何提到接收者的優先級?如果接收者沒有更高的優先級,那麼消息應用可能會阻止廣播到達我的應用。有沒有人遇到類似這樣的解決方案?

回答

4

我用下面的代碼來實現我在找的東西!

IntentFilter fp = new IntentFilter(); 
fp.addAction("android.provider.Telephony.SMS_RECEIVED"); 
fp.setPriority(18); 

//--- when the sms is received --- 
registerReceiver(new BroadcastReceiver(){ 
    @Override 
    public void onReceive(Context arg0, Intent arg1) { 
     //Processing for received broadcast happens here    
    } 
}, fp); 
0

我會解決這個問題,通過使用自定義意向操作,如com.example.intent.VERIFICATION_RECEIVED和從SMSReciever廣播,然後讓您的ActivityBroadcastReceiver一起聽它。

IntentFilter filter = new IntentFilter(PageFragment.ACTION_LOADING_DONE); 
registerReceiver(new MyReceiver(), filter); 

使用這種方法,你可以保持您的短信處理中SMSReciever和你Activity並不需要關心如何處理短信。

+0

這個想法出現在我的腦海裏,是我解決問題的方法,如果沒有其他的工作:) – Rupin

1

我自己沒有測試過,但我通過Android源代碼進行了快速搜索。

將優先級解析並保存到IntentFilter(請參見code)。因此,您可以創建IntentFilter並使用它的setPriority()函數來設置廣播接收器的優先級。

IntentFilter filter = new IntentFilter(...); 
filter.setPriority(receiverPriority);// <----- 
context.registerReceiver(filter, mBroadcastReceiver);