Android 13以降のOSには通知の表示に許可が必要になったので実装方法をメモします。
Manifest.xmlに以下を追加します。
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
ActivityResultLauncher を準備する
通知許可は、ActivityResultContracts.RequestPermission() を使います。
private val requestPermissionLauncher = registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { isGranted ->
if (isGranted) {
// 通知が許可された場合の処理
} else {
// 拒否された場合処理
}
}
推奨:事前に許可状態をチェックする
Android 13以上の場合かつまだ許可が出ていない場合にダイアログを表示させます。
// Android 12以下では通知許可は自動的に許可扱いになる
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
if (ContextCompat.checkSelfPermission(
this,
Manifest.permission.POST_NOTIFICATIONS
) != PackageManager.PERMISSION_GRANTED
) {
requestPermissionLauncher.launch(
Manifest.permission.POST_NOTIFICATIONS
)
}
}
これで、システム標準の通知許可ダイアログが表示されます。
実務ではいきなり許可ダイアログを表示するのではなく、まず通知の用途を説明するためのポップアップ画面を表示します。その次に許可ダイアログを表示し、もし拒否された場合は設定画面へ誘導します。