top of page

SDK31対応メモ

更新日:4月30日

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を使っていたので変更後はかなり不安でしたが、一日試験稼働させてみたところ問題なく更新されているようです。




























久しぶりに大規模アップデートになってしまった気がします。

閲覧数:401回0件のコメント

最新記事

すべて表示

Comments


bottom of page