🔔
Androidの通知権限取得・チャンネル作成
Androidで通知を送るには権限許可、チャンネル作成の必要があるがAndroid OSバージョンによって挙動が変わる。
確認環境
compileSdk = 34
targetSdk = 34
minSdk = 29
インストール後の状態
- Android12以下
- 通知設定は自動的オンにになる。
※ただし通知チャンネルを作成しないと通知は届かない。
- 通知設定は自動的オンにになる。
- Android13以上
- デフォルトはオフ(明示的に付与する必要がある)
12以下 | 13以上 |
---|---|
通知権限の付与
AndroidManifest
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
ユーザに権限許可を求める
- Android13以上では権限をリクエストする必要がある
private val permissionLauncher = registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted -> Log.d("sample", "granted=$isGranted") } if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && ContextCompat.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_DENIED) { permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS) }
チャンネルの作成
val channel = NotificationChannel(ID, NAME, IMPORTANCE)
channel.description = DESCRIPTION
val notificationManager = context.getSystemService(NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(channel)
-
Android13以下
- ユーザに権限許可を求めなくてOK、チャンネルを任意のタイミングで作成しておけば、アプリで通知を受け取れるようになる
-
チャンネル作成のタイミング
- 必ずしも権限が許可されてからチャンネルを作る順番である必要はない
例 : チャンネルを作っておく→ POST_NOTIFICATIONS が許可 → 通知権限がオンになると同時にチャンネルも設定画面に現れる
- 必ずしも権限が許可されてからチャンネルを作る順番である必要はない
Discussion