2017-09-14 17 views
3

Android 8.0、Oreoの前に、登録済みのブロードキャストでdetect a headset plugged in with a background serviceとすることができました。 Android Oのバックグラウンド実行制限では、通知なしでこれを行うことはできません。targetSDKVersion> = 26のAndroid 8.0に接続されたヘッドセットを検出する方法

ACTION_HEADSET_PLUGは例外的なブロードキャストですが、まだ登録済みの受信者には送信しません。

バックグラウンドサービスを使用することはできません。マニフェストレシーバーを介して目が覚めることはできません。解決策は何ですか? targetSDKVersionを更新しないでください。

+2

私はこれがAndroid 8.0の見逃しであると思うので、私はフレームワークチームに問題を提出しました。 https://issuetracker.google.com/issues/65672608 – Justin

答えて

0

それはlist of the exempted broadcastsにあるので、公式ドキュメントによって、あなたは、ないアンドロイドO制限でACTION_HEADSET_PLUGを使用することができますようだ:

注:暗黙のブロードキャストの数は現在、この 制限を免除されています。アプリケーションは のどのAPIレベルであっても、マニフェストにこれらの ブロードキャストの受信者を登録し続けることができます。免除されたブロードキャストのリストについては、Implicit Broadcast Exceptionsを参照してください。

UPDATE:CommonsWareが書いたように、ACTION_LOCALE_CHANGEDのために、例えば、唯一の

intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);

ACTION_HEADSET_PLUGためのフラグとないようIntent.FLAG_RECEIVER_INCLUDE_BACKGROUNDフラグがある

しかし、IRL、。

+1

ソースコードを正しく読んでいると、ドキュメントが正しくないようです。 – CommonsWare

+0

あなたが正しいと思われます - ソースコードは真実のソースです。私はそれを確認します。 –

関連する問題