ネットワーク変更レシーバークラスがあり、それがブロードキャストレシーバーから拡張されていますが、Android Oreo、Oreoはブロードキャストレシーバーをサポートしていますか、サポートしていない場合は、 、それを行う他の方法は何ですか
Oreoではマニフェストタグとしてサポートされていません。context.registerReceiver()を使用してService/Activityで登録する必要があります。または、WorkManagerを使用して、特定のネットワーク条件に合わせて何かをスケジュールします。
Oreoはブロードキャストレシーバーをサポートしていますが、マニフェストで宣言されている暗黙のブロードキャストにいくつかの制限があります。
暗黙的vs明示的ブロードキャスト:
ドキュメントによると 、暗黙のブロードキャストは、そのアプリを明確に対象としないブロードキャストです。たとえば、 _ACTION_PACKAGE_REPLACED
_ はすべての登録済みリスナーに送信され、デバイス上のパッケージが置き換えられたことを通知するため、暗黙のブロードキャストです。
ただし、_ACTION_MY_PACKAGE_REPLACED
_は暗黙的なブロードキャストではありません。パッケージが置き換えられたアプリに送信されるのは、そのブロードキャストのリスナーを登録している他のアプリの数に関係ありません。
したがって、暗黙的なブロードキャストをリッスンしているアプリケーションマニフェスト内で静的に定義したブロードキャストレシーバーは、それらのブロードキャストを受信しなくなります。
この変更の理由は、暗黙のブロードキャストが以前にマニフェスト内でそれらをリッスンしているコンポーネントをトリガーするためです。これは、特定のブロードキャストを受信するために登録された多数のアプリケーションがすべて同時。
ただし、暗黙のブロードキャストに関しては例外のリストがあります—これは、ブロードキャストを受信するために登録できるものがまだあることを意味します。それらはすべて以下にリストされています。
したがって、受信者を登録したブロードキャストがこのリストにある場合、以前と同じように機能します。ただし、受信するように登録したブロードキャストがこのリストにない場合は、次のような代替ソリューションを使用する必要があります。
Context.registerReceiver()
を呼び出して実行時にレシーバーを作成します。