请问与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中设置的意图..
答案 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。