2

How does android resolve multiple entry in the AndroidManifest for the same broadcast receiver with different permissions and intent-filters?への回答を見直しました。しかし、私の質問は少し異なります。

アプリに 2 つのクラスがあり、1 つはサービスを開始し、もう 1 つは異なるシステム イベントに基づいてサービスを停止する場合、両方が同じブロードキャストを受信できますか。

ユーザーが機内モードをオンまたはオフに切り替えたかどうかに応じて、サービスを開始または停止したいと考えています。私のマニフェストの次のエントリで起動されることにより、両方のクラスで onReceive() ます。

    <receiver android:name=".StartService">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <action android:name="android.intent.action.BATTERY_OKAY"/>
            <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>"
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.AIRPLANE_MODE"/>
        </intent-filter>
    </receiver>

    <receiver android:name=".StopService" >
        <intent-filter>
            <action android:name="android.intent.action.BATTERY_LOW"/>
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.AIRPLANE_MODE"/>
        </intent-filter>

        <!-- for power testing only -->
        <!--<intent-filter>
            <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
        </intent-filter>-->
    </receiver>
4

2 に答える 2

2

それが可能かどうかはわかりませんが、代替方法は StartService レシーバーでそれをキャッチし、その中でサービスのステータスを確認することです。サービスがすでに開始されている場合は、ブロードキャストを開始し、StopService 内でそれをキャッチしますか?

于 2012-05-10T16:05:06.767 に答える
1

私の記憶が正しければ、これらのイベントをキャプチャするためにクラス リスナーに登録します。つまり、接続マネージャー。したがって、接続の変更をキャプチャするサービスとして単一のクラスを実行し (その時点で機内モードにあるかどうかを検出できます)、何でも行うか、現在アクティブなアクティビティに登録してリッスンすることができます。それらの出来事も。個人的には、ほぼすべてのシナリオでバックグラウンドで実行されるサービスを選びます。

編集:あなたの質問を読むと、あるクラスでサービスを開始し、他のクラスでそのサービスを強制終了したいようです。その場合、必ずしもそれが最善の方法であるとは限りません。開始したサービスの代わりに、登録して接続の変更をキャプチャし、サービス自体を停止させます。

于 2012-05-10T16:05:47.643 に答える