1

BroadcastReceiver の登録に問題があります。

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ガイドラインによる。

一意性を確保するために、パッケージ名をプレフィックスとして使用することをお勧めします。

次に、アクションを次のように宣言する必要があります。

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

ただし、他のアプリとの競合を避けるために、アクションとして使用する文字列には一意の値を指定する必要があります。そのため、Google はパッケージのプレフィックスを付けることを推奨しています。

于 2012-10-30T13:17:40.357 に答える
1

Manifest.xml の以下の 2 行を変更してみてください。

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 に答える