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

前端 未结 10 1068
逝去的感伤
逝去的感伤 2020-11-28 03:15

Is there any way I can launch an intent to get to Android\'s notification settings screen for my app (pictured below)? Or an easy way I can make a PreferenceScreen item that

10条回答
  •  感情败类
    2020-11-28 03:46

    I merged the code of some of the answers above and added little edit, I have tested and it working fine on Android KitKat, Lollipop, Marshmallow, Nougat, Oreo and Pie, API level 19 - 28

    public void goToNotificationSettings(Context context) {
    
        String packageName = context.getPackageName();
    
        try {
            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, packageName);
                intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
    
            } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.O) {
    
                intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
                intent.putExtra("android.provider.extra.APP_PACKAGE", packageName);
    
            } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    
                intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
                intent.putExtra("app_package", packageName);
                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:" + packageName));
    
            } else {
                return;
            }
    
            startActivity(intent);
    
        } catch (Exception e) {
            // log goes here           
    
        }
    
    }
    

提交回复
热议问题