2012-05-10 16 views
2

私はHow does android resolve multiple entries 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> 

答えて

1

私が正しく覚えていれば、クラスリスナーに登録して、それらのイベントをキャプチャしてください。私。接続マネージャー。そのため、接続の変更をキャプチャして(飛行機モードであるかどうかを検出できる)、1つのクラスをサービスとして実行したり、現在アクティブなアクティビティに登録してリッスンしたりすることができますそれらのイベントも同様です。私はほぼすべてのシナリオでバックグラウンドで実行されているサービスに行きたいと思っています。

編集: あなたの質問を読むと、あるクラスのサービスを開始したように聞こえ、他のクラスのサービスを終了したいと思っています。その場合、私は必ずしもそれを行う最善の方法ではないと思います。あなたが始めたサービスの代わりに登録して、接続の変更を取得し、サービスが停止するように登録します。

2

これが可能かどうかはわかりませんが、StartService受信者でそれをキャッチし、その内部でサービスの状態を確認する方法があります。サービスが既に開始されている場合は、オンブロードキャストを開始し、StopServiceでそのサービスをキャッチしますか?

関連する問題