web-dev-qa-db-ja.com

ブロードキャストレシーバーAndroid Oreo

ネットワーク変更レシーバークラスがあり、それがブロードキャストレシーバーから拡張されていますが、Android Oreo、Oreoはブロードキャストレシーバーをサポートしていますか、サポートしていない場合は、 、それを行う他の方法は何ですか

6
Eder Padilla

Oreoではマニフェストタグとしてサポートされていません。context.registerReceiver()を使用してService/Activityで登録する必要があります。または、WorkManagerを使用して、特定のネットワーク条件に合わせて何かをスケジュールします。

3
user9906968

Oreoはブロードキャストレシーバーをサポートしていますが、マニフェストで宣言されている暗黙のブロードキャストにいくつかの制限があります。

暗黙的vs明示的ブロードキャスト:

ドキュメントによると 、暗黙のブロードキャストは、そのアプリを明確に対象としないブロードキャストです。たとえば、 _ACTION_PACKAGE_REPLACED_ はすべての登録済みリスナーに送信され、デバイス上のパッケージが置き換えられたことを通知するため、暗黙のブロードキャストです。

ただし、_ACTION_MY_PACKAGE_REPLACED_は暗黙的なブロードキャストではありません。パッケージが置き換えられたアプリに送信されるのは、そのブロードキャストのリスナーを登録している他のアプリの数に関係ありません。

したがって、暗黙的なブロードキャストをリッスンしているアプリケーションマニフェスト内で静的に定義したブロードキャストレシーバーは、それらのブロードキャストを受信しなくなります。

この変更の理由は、暗黙のブロードキャストが以前にマニフェスト内でそれらをリッスンしているコンポーネントをトリガーするためです。これは、特定のブロードキャストを受信するために登録された多数のアプリケーションがすべて同時。

ただし、暗黙のブロードキャストに関しては例外のリストがあります—これは、ブロードキャストを受信するために登録できるものがまだあることを意味します。それらはすべて以下にリストされています。

enter image description here

したがって、受信者を登録したブロードキャストがこのリストにある場合、以前と同じように機能します。ただし、受信するように登録したブロードキャストがこのリストにない場合は、次のような代替ソリューションを使用する必要があります。

  • マニフェストでレシーバーを宣言する代わりに、Context.registerReceiver()を呼び出して実行時にレシーバーを作成します。
  • スケジュールされたジョブを使用して、暗黙のブロードキャストをトリガーした条件を確認します。

詳細

13
Rahul Sahni