1

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

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

ありがとう、マイク

4

1 に答える 1

2

受信者を動的に登録する場合( )、アクティビティを一時停止する前に登録を解除する()のContext.registerReceiverあなたの仕事です。Context.unregisterReceiverそして、ドキュメントから読むように:

一時停止してもインテントを受信できません。これにより、不要なシステムオーバーヘッドが削減されます。

onPauseは、何かがアクティビティを隠したときに呼び出されます。そして、onResumeに再登録できます。

ただし、これは必要なものではありません。アプリケーションが停止しているときでもブロードキャストを受信したい場合は、Androidマニフェストで宣言する必要があります。このコードは機能すると思います:

    <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>
于 2011-10-28T17:19:09.160 に答える