😺

Android 14のRestrictions to implicit and pending intents対応で失敗した事

2023/10/25に公開

概要

自分が開発に携わっているアプリで
https://developer.android.com/about/versions/14/behavior-changes-14#safer-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