Any way to link to the Android notification settings for my app? Any way to link to the Android notification settings for my app? android android

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);}