在Android中动态创建广播接收器

时间:2011-08-18 14:35:20

标签: android broadcastreceiver

我正在建立一个Android应用程序,通过短信向用户提供信息。用户发送短信到APP中硬编码的预定号码,然后收到回复。

为了实现这一点,我在我的Android Manifest中使用广播接收器

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

如果我创建一个新类SMSReciever,那么当收到回复时,我会以某种方式将信息发送回用户在屏幕上打开的活动。我可以动态地在我的主要活动中执行此操作,以便可以使应用程序更具交互性吗?

我已经了解了Context.registerReciever方法,但是如何提及接收方的优先级?如果接收者没有更高的优先级,那么消息传递应用可能会阻止广播到达我的应用。有没有人遇到过类似这样的解决方案?

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

我自己没有测试过,但我已经通过Android源代码进行了快速搜索。

优先级被解析并保存到IntentFilter(请参阅code)。因此,您可以创建IntentFilter并使用其setPriority()功能来设置广播接收器的优先级。

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

答案 2 :(得分:0)

我会通过使用com.example.intent.VERIFICATION_RECEIVED之类的自定义意图操作以及从SMSReciever广播此操作,然后让Activity通过BroadcastReceiver收听来解决此问题。< / p>

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

使用此方法,您可以在SMSReciever中保持短信处理,而您的Activity无需关心如何处理短信。