SDKバージョンを29から32に上げたところエラーが出た。
targetSdkVersion 32
[原文]
Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
[直訳]
S+ (バージョン 31 以降) をターゲットにするには、PendingIntent の作成時に FLAG_IMMUTABLE または FLAG_MUTABLE のいずれかを指定する必要があります。
FLAG_IMMUTABLE の使用を強く検討してください。一部の機能が変更可能な PendingIntent に依存している場合にのみ FLAG_MUTABLE を使用してください。 インライン返信またはバブルで使用する必要がある場合。
どうも31以降は何か対応方法が変わったようですね。
検索して調べるとandroidx.work:work-runtime-ktxをbuild.gradle(app)のdependenciesへ追加するとエラーを吐かなくなるという情報が出てきたので、現在の最新バージョンで入れてみる。
implementation 'androidx.work:work-runtime-ktx:2.7.1'
そうすると、また別のエラーが、、、
MainActivityのPendingIntentの第四引数のエラーであった。
alarmIntent = Intent(this, AlarmReceiver::class.java).let { intent ->
PendingIntent.getBroadcast(this, 0, intent, 0}
→第4引数を、0ではなく「PendingIntent.FLAG_IMMUTABLE」に変更します。
[修正前]
PendingIntent.getBroadcast(this, 0, intent, 0)
[修正後]
PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_IMMUTABLE)
さらに検索して調べてみると
SDK31以降は、
・FLAG_IMMUTABLE
・FLAG_MUTABLE
のどちらかを明示的に指定しないとならなくなったようで 、FLAG_UPDATE_CURRENTなど、他の値も使用不可能とのこと。
ウィジェットの更新は、FLAG_UPDATE_CURRENTを使っていたので変更後はかなり不安でしたが、一日試験稼働させてみたところ問題なく更新されているようです。
久しぶりに大規模アップデートになってしまった気がします。
Comments