将intent过滤器与broadcastReceivers Android一起使用

时间:2012-02-16 07:48:05

标签: android android-intent intentfilter

请问与Intent过滤器一起使用broadcastReceiver的正确方法是什么? 在我的android_manifest.xml文件中,我有这些行:

        <activity android:name=".DataDisplayActivity" android:theme="@android:style/Theme.Holo.NoActionBar" android:icon="@drawable/icon_3d" android:label="AdvancedHyperXPositiveSuperFluousApp">
        <intent-filter>
            <action android:name="com.simekadam.blindassistant.UPDATE_GPS_UI"/>
            <action android:name="com.simekadam.blindassistant.UPDATE_CONTEXT_UI"/> 
        </intent-filter>
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        </activity>

在活动中,我使用此功能设置了接收器

    registerReceiver(broadcastReceiver, null);

它在null上失败,obvi它需要设置IntentFilter并且我可以将其作为param添加到函数中,但我问,如何将它与XML定义的intent过滤器一起使用。谢谢你的帮助

预告片:我实际上已经使用了内联集合意图,但我想知道如何使用XML中设置的意图..

2 个答案:

答案 0 :(得分:16)

当您使用 registerReceiver 接收广播时,您不需要在xml中定义intent-filters。

在您的情况下,您应该创建一个扩展到 BroadcastReceiver 的类,然后在android的清单文件中定义该类文件。例如:

类文件:

package your.package.name;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class MyCustomReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        if(action.equals("com.simekadam.blindassistant.UPDATE_GPS_UI")){
            //do something
        }
        else if(action.equals("com.simekadam.blindassistant.UPDATE_CONTEXT_UI")){
            //do something
        }
    }
}

并在清单中添加:

<receiver android:name=".MyCustomReceiver" android:enabled="true">
     <intent-filter>
        <action android:name="com.simekadam.blindassistant.UPDATE_GPS_UI" />
        <action android:name="com.simekadam.blindassistant.UPDATE_CONTEXT_UI" />
     </intent-filter>
</receiver>

答案 1 :(得分:5)

您可以在manifest.xml中注册接收器和intent-filters,如上所述,或者您可以动态执行以下两项操作:

Myreceiver reMyreceive = new Myreceiver();
IntentFilter filter = new IntentFilter("actionname");
registerReceiver(reMyreceive, filter);

其中myreceiver将成为您的班级扩展广播接收器。您可以查看完整示例here