1

我在注册广播接收器时遇到问题。

当我使用 registerReceiver 注册它时它可以工作:

registerReceiver(new NotifReceiver(), new IntentFilter(NotifReceiver.POST_NOTIF));

但不适用于 AndroidManifest.xml :

    <receiver
        android:name=".receiver.NotifReceiver"
        android:enabled="true"
        android:exported="false" >
        <intent-filter>
            <action android:name=".receiver.NotifReceiver.POST_NOTIF" />
        </intent-filter>
    </receiver>

NotifReceiver.java:

public class NotifReceiver extends BroadcastReceiver {

    public static final String POST_NOTIF = "POST_NOTIF";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(POST_NOTIF)) {
            Log.d("debug", "action received");
        }
    }

}
4

3 回答 3

3

根据Google Guidelines 关于 action 标签

最好使用包名作为前缀,以确保唯一性。

然后您应该将您的操作声明为:

public static final String POST_NOTIF = "com.my.package.POST_NOTIF";

并在您的清单中引用为:

<intent-filter>
     <action android:name="com.my.package.POST_NOTIF" />
</intent-filter>

注意,android:name只需要匹配POST_NOTIF静态字符串的值。

但是为了避免与其他应用程序发生冲突,您应该为您用作操作的字符串设置一个唯一值。这就是为什么谷歌建议在你的包裹前加上前缀。

于 2012-10-30T13:17:40.357 回答
1

尝试在 Manifest.xml 中更改以下两行:

1. android:name=".receiver.NotifReceiver"
2. <action android:name=".receiver.NotifReceiver.POST_NOTIF"/>

1. android:name="*full.pkg.name*.receiver.NotifReceiver"
2. <action android:name="*full.pkg.name*.receiver.NotifReceiver.POST_NOTIF"/>
于 2012-10-30T13:18:08.610 回答
0

<action android:name=".receiver.NotifReceiver.POST_NOTIF" />
用这个 代替 <action android:name="POST_NOTIF" />

于 2012-10-30T13:17:47.020 回答