根据自定义数据过滤意图

时间:2011-05-10 23:11:00

标签: android android-intent

我想用自定义数据广播意图,只有拥有此自定义数据的接收者应该接收这个意图,如何做到这一点?

这是我如何广播意图:

Intent intent = new Intent();
 intent.setAction("com.example");
 context.sendBroadcast(intent);

我将广播接收器定义如下:

 <receiver android:name="com.test.myReceiver" android:enabled="true">
        <intent-filter>
            <action android:name="com.example"></action>
        </intent-filter>
    </receiver>

2 个答案:

答案 0 :(得分:2)

基本上如何设置你的myReceiver课程。

public class myReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context arg0, Intent intent) {
        //Do something
    }
}

您不必检查Intent操作,因为您已根据清单中包含的内容对其进行了过滤,至少在这种简单的情况下。您可以使用其他操作和过滤器,在这种情况下,您需要对收到的意图进行某种检查。

如果您希望过滤器对数据进行过滤,则有关intent过滤器的sdk文档会涵盖这些内容。我对数据类型不是很好,所以我给的任何例子都会比较差。无论如何,这里是清单意图过滤页面的链接: http://developer.android.com/guide/topics/manifest/intent-filter-element.html

数据元素的具体页面; http://developer.android.com/guide/topics/manifest/data-element.html

答案 1 :(得分:0)

如果您已经定义了广播接收器类,那么下一步就是在您希望接收广播意图的活动/服务上注册它。注册的一个例子:

    IntentFilter iFilter = new IntentFilter();
    iFilter.addAction("com.example"); //add your custom intent to register
    //below is your class which extends BroadcastReceiver, contains action 
    //which will be triggered when current class received the broadcast intent
    MyReceiver myReceiver = new MyReceiver(); 
    registerReceiver(myReceiver, iFilter); //register intent & receiver

如果您销毁活动/服务,为了获得最佳实践,请不要忘记在同一活动/服务上取消注册广播接收器:

@Override
protected void onDestroy() {
    if(myReceiver!=null)
        unregisterReceiver(myReceiver)
    super.onDestroy();
}

MyReceiver类:

public class MyReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context arg0, Intent intent) {
        if(intent.getAction().equals("com.example")){
            //DO SOMETHING HERE
        }
    }
}