1

私は近くのペアデバイスに自動的に接続するためにBluetoothを使用しているアプリケーションを開発しています。そのため、ACTION_FOUND、DISCOVERY_FINISHEDなどの特定のブロードキャストを聞く必要があります。ブロードキャストを受信するブロードキャスト受信機を登録して、それに応じて処理を実行する必要があります。私は、この放送受信機が私のアプリのバックグラウンドでいつでも動作する必要があるということです。私はそれをインテントサービスに合わせようとしましたが、それは速く終わったことが判明し、onDestroyはレシーバーを終了させると呼ばれています。この問題を克服するために、属性がtrueからfalseに変わったときにのみ壊れる無限ループを挿入しました。どういうわけか、これは悪い習慣だと感じています。より良い解決策があるかどうか尋ねています。ブロードキャスト受信機はどこに登録すればよいですか?

PS。受信機をメインのアクティビティに合わせるべきですか?それはいつ破壊されるのですか?戻るボタンでアプリケーションを終了したとき、またはタスクキラーでプロセスを終了したときにのみonDestroyが呼び出されますか?また、アプリケーションに別のGUIウィンドウを入力したときにも発生しますか?

おかげで、マイク

答えて

2

あなたは、動的に(Context.registerReceiverを)あなたの受信機を登録する場合、あなたの活動が一時停止される前に(Context.unregisterReceiverを)それを登録解除するあなた仕事です。そしてドキュメントからの読み取りとして:一時停止したときに

あなたはインテントを受信しませんが、これは、不必要なシステムのオーバーヘッドを削減します

何かがあなたの活動を隠したときにonPauseが呼び出されます。そして、あなたはonResumeに登録することができます。

ただし、これは必要なものではありません。あなたのアプリケーションが死んでいる間でさえ放送を受信したいなら、それをAndroid Manifestで宣言する必要があります。私は、このコードは動作すると思います:

<receiver android:name=".YourReceiverClassName"> 
     <intent-filter> 
      <action android:name="android.bluetooth.adapter.action.ACTION_FOUND"/> 
      <action android:name="android.bluetooth.adapter.action.ACTION_DISCOVERY_FINISHED"/> 
     </intent-filter> 
    </receiver> 
+0

は、ここでは1がより多くの情報を見つけるかもしれない、ありがとう: http://www.vogella.de/articles/AndroidServices/article.html – Miky

+0

@Jong uが任意のアイデアの問題を持っていますここに記載http://stackoverflow.com/q/20904455/2624806 – CoDe

関連する問題