📖

通知の設定取得と設定画面への遷移

2021/04/26に公開

Androidの通知について調べ直す事があったのでメモを残します。

特定のチャンネルの通知が可能かどうか調べる

fun isEnableNotificationSetting(context: Context): Boolean {
    val manager: NotificationManagerCompat = NotificationManagerCompat.from(context)
    val channel = manager.getNotificationChannel(notificationId)
    val isNotice: Boolean = manager.areNotificationsEnabled()

    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        val channelNotice = channel?.importance != NotificationManager.IMPORTANCE_NONE && isNotice
        channelNotice
    } else {
        isNotice
    }
}

NotificationManagerCompat.areNotificationsEnabled()でアプリ全体の通知設定を確認します。
※Oreo未満の端末だとチャンネルが無いのでこちらのみになります。

チャンネル毎の通知設定は
NotificationManagerCompat.getNotificationChannel(notificationId)で取得したチャンネルにchannel?.importance != NotificationManager.IMPORTANCE_NONEで判定できます。

自アプリの通知設定画面に遷移させる

fun makeNotificationSettingIntent(context: Context): Intent {
    val intent = Intent()
    intent.action = android.provider.Settings.ACTION_APP_NOTIFICATION_SETTINGS
    intent.putExtra("app_package", context.packageName)
    intent.putExtra("app_uid", context.applicationInfo.uid)
    intent.putExtra("android.provider.extra.APP_PACKAGE", context.packageName)

    return intent
}

あとはこのIntentをstartActivityするだけです。

サンプルプロジェクト

https://github.com/sobaya-0141/flow_sample/tree/notification

Discussion