😺
Android 14のRestrictions to implicit and pending intents対応で失敗した事
概要
自分が開発に携わっているアプリで
に記載されている「Restrictions to implicit and pending intents」に対応したが、一部ミスに気付いたので、後学のためにメモしておきます。Context.RECEIVER_NOT_EXPORTEDで登録したBroadcastReceiverにIntentが届かない
Intentにpackageの指定が必要です。
公式ドキュメントではActivityが例として出されていますが、同様にnon-exportedなBroadcastReceiverに対しても、package未指定のIntentは届きません。
system broadcastsを受け取るBroadcastReceiverではContext.RECEIVER_NOT_EXPORTEDやContext.RECEIVER_EXPORTEDは指定NG
https://developer.android.com/about/versions/14/behavior-changes-14#system-broadcasts に記載されている通り、指定NGです。
Context.RECEIVER_NOT_EXPORTEDを指定してもsystem broadcastsは受け取れていましたが、今後OSの挙動が変わる可能性もあるので、指定しない方が良いでしょう。
具体的にどれがsystem broadcastsなのかは https://developer.android.com/guide/components/broadcasts#system-broadcasts に記載されている通り、Android SDKの中のBROADCAST_ACTIONS.TXTに記載があります。
例えば、 ./platforms/android-34/data/broadcast_actions.txt
が該当のファイルの置き場所です。
Discussion