4

複数のアクションをリッスンするレシーバー クラスがありますが、アクションをキャッチできません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
ただし.OtherReceiverMainfestファイルでコメントすると、それをキャッチできます。
このクラスのコードは次のとおりです。

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
4

2 に答える 2

9

まず、要素から削除android:permission="android.permission.RECEIVE_BOOT_COMPLETED"します<receiver>

第二に、あなたの<data>部分はその内のすべての要素<intent-filter>に適用されますが、これは望ましくありません。ありません。<action><intent-filter>UriACTION_BOOT_COMPLETED

ただし、別の要素を作成するのではなく、元の要素に<receiver>別の要素を作成することもできます。あなたを新しいものに移動して(おそらくそれも)、最初の の影響を受けないようにします。<intent-filter><receiver><action android:name="android.intent.action.BOOT_COMPLETED" /><intent-filter>com.myApp.wifitimer<data><intent-filter>

于 2013-03-30T21:41:29.880 に答える