複数のアクションをリッスンするレシーバー クラスがありますが、アクションをキャッチできませんandroid.intent.action.BOOT_COMPLETED
。私が間違っていることは何ですか?ここに私のマニフェストファイルがあります:
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!--<receiver android:name=".OtherReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>-->
<receiver android:name="com.myApp.AppReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.PACKAGE_ADDED"/>
<action android:name="com.myApp.wifitimer"/>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="package" android:path="com.myApp" />
</intent-filter>
</receiver>
ご覧のとおり、レシーバー内に許可を再度追加し、この回答が示すように、レシーバーの名前がクラスのフルネームを取得します。
ブロードキャストレシーバークラスは次のとおりです。
@Override
public void onReceive(Context arg0, Intent arg1) {
String action1 = arg1.getAction();
if(action1.equals(Intent.ACTION_BOOT_COMPLETED)) {
Log.d("receiver","action is: boot");
}
if(action1.equals("android.intent.action.PACKAGE_REPLACED")) {
Log.d("receiver","action is: package");
}
}
アプリを実行すると、レシーバーは をキャッチしますandroid.intent.action.PACKAGE_REPLACED
が、電話を再起動すると、レシーバーは をキャッチしませんBOOT_COMPLETED
。
ただし.OtherReceiver
、Mainfestファイルでコメントすると、それをキャッチできます。
このクラスのコードは次のとおりです。
public class OtherReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
String action = arg1.getAction();
if(action.equals(Intent.ACTION_BOOT_COMPLETED)) {
Log.d("new receiver","action is: boot");
}
}
}
他のものと同じです。私の質問は、なぜBOOT_COMPLETED
アクション用に別のレシーバーを定義する必要があるのですか?
編集:また、これに従ってadbを介してアクションを送信しようとしましたが、許可なく AppReceiverクラスでキャッチできました:
am broadcast -a android.intent.action.BOOT_COMPLETED -c android.intent.category.HOME -n com.blubuk/.AppReciever