🍑
Android12 APIレベル31、完全対応マニュアル
2023年1月から、Android12 APIレベル31、の対応が必須になりました。
そこで必要な対応内容と、それぞれの解説をまとめておきます。
解説はいらねぇ、対応だけパッパと見せやがれ!って人のために解説は注釈にしておきます。
順番は、僕自身が必要になったもの順です。
参考:
ついでにコチラもご一緒にどうぞ〜
0. build.gradleの、targetSdkVersion、を31にする
たまに、minSdkVersion だと勘違いしている方がいますが、targetSdkVersion、です。
1. AndroidManifestに、android:exported 属性の追加
AndroidManifest.xmlの
- activity
- receiver
- service
タグに、「android:exported="false"」、を追加する。
ただし、MainActivityだけは、「android:exported="true"」、に。
資料にはserviceもって書いてるけど、書かなくても問題ないですね..。
IntentフィルターをService内で使ってないからかな?
2. PendingIntentに、PendingIntent.FLAG_IMMUTABLE フラグを追加
PendingIntentの第4引数、flagに、PendingIntent.FLAG_IMMUTABLE、を追加する。
PendingIntent.getBroadcast(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
IMMUTABLEフラグを追加したのに、IMMUTABLEにしろってエラーが消えない場合は、gradleに次のimplementationを追加すること。
implementation "androidx.work:work-runtime-ktx:2.7.1"
3. AndroidManifestniに、SCHEDULE_EXACT_ALARM 権限の追加
exact系の正確なアラームを使っている場合は、AndroidManifest、に、SCHEDULE_EXACT_ALARM 権限を追加していないと、「アラームを呼び出したタイミングで」 アプリが落ちます。最悪..。
これ以降は、僕は設定していないけど、資料に有った内容を転記しておきます。
4. AndroidManifestの、Bluetooth権限宣言の置き換え
- BLUETOOTH 権限
- BLUETOOTH_ADMIN 権限
を
- BLUETOOTH_SCAN 権限
- BLUETOOTH_ADVERTISE 権限
- BLUETOOTH_CONNECT 権限
のいずれかに置き換える。
参考:
5. AndroidManifestに、ACCESS_COARSE_LOCATION 権限の追加
ACCESS_FINE_LOCATION、をリクエストする場合、AndroidManifestに、ACCESS_COARSE_LOCATION 権限を追加する。
参考:
Discussion