Any way to link to the Android notification settings for my app?
The following will work in Android 5.0 (Lollipop) and above:
Intent intent = new Intent();intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");//for Android 5-7intent.putExtra("app_package", getPackageName());intent.putExtra("app_uid", getApplicationInfo().uid);// for Android 8 and aboveintent.putExtra("android.provider.extra.APP_PACKAGE", getPackageName());startActivity(intent);
Notes: This is not officially supported in Android 5-7, but it works just fine. It IS officially supported as of Android 8. This code is not backwards compatible with versions of Android before 5.0.
I merged the solution of Sergei and Shhp to support all the cases :
Intent intent = new Intent(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS); intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName()); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS"); intent.putExtra("app_package", context.getPackageName()); intent.putExtra("app_uid", context.getApplicationInfo().uid); } else { intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setData(Uri.parse("package:" + context.getPackageName())); } context.startActivity(intent);
I've appended Channel Notification Settings for Android 8.0 Oreo API 26 or later. There is a solution from Android 4.4, KitKat.
Usage for Channel notification settings:
// PRIMARY_CHANNEL:goToNotificationSettings(getString(R.string.PRIMARY_CHANNEL), mContext);// SECONDARY_CHANNEL:goToNotificationSettings(getString(R.string.SECONDARY_CHANNEL), mContext);
Usage for App notification settings:
goToNotificationSettings(null, mContext);
The method of goToNotificationSettings:
public void goToNotificationSettings(String channel, Context context) { Intent intent = new Intent(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { intent.addFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK); if (channel != null) { intent.setAction(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS); intent.putExtra(Settings.EXTRA_CHANNEL_ID, channel); } else { intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS); } intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName()); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (channel != null) { intent.setAction(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS); intent.putExtra(Settings.EXTRA_CHANNEL_ID, channel); } else { intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS); } intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName()); } else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS); intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName()); } else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS); intent.putExtra("app_package", context.getPackageName()); intent.putExtra("app_uid", context.getApplicationInfo().uid); } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) { intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setData(Uri.parse("package:" + context.getPackageName())); } context.startActivity(intent);}