在Android中使用意图过滤器与广播接收器

8

请问如何正确地使用广播接收器和意图过滤器?在我的 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上失败了,显然需要设置IntentFilter,我可以将其作为参数内联添加到函数中,但我想知道如何使用XML定义的意图过滤器。谢谢您的帮助。

提示:我实际上已经通过内联设置意图使其工作,但我想知道如何使用在XML中设置的意图。

2个回答

17

如果你使用registerReceiver接收广播,就不需要在xml中定义intent-filter。

在你的情况下,你应该创建一个继承于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>

明白了..我在我的xml中没有接收者包装器..:) 谢谢 - simekadam

5
您可以按照上述说明在manifest.xml中注册您的接收器和意图过滤器,也可以动态地执行这两件事情,如下所示:
Myreceiver reMyreceive = new Myreceiver();
IntentFilter filter = new IntentFilter("actionname");
registerReceiver(reMyreceive, filter);

其中myreceiver将是您的类扩展广播接收器。 您可以在此处查看完整示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接