以编程方式访问应用程序通知设置

Access application notification settings programmatically

在 Android 应用程序中,我有一个按钮,我希望它具有打开应用程序通知设置的功能(在 Android 设置中)。

我可以用这个

打开Android设置
startActivityForResult(new Intent(android.provider.Settings.ACTION_SETTINGS), 0);

但我想直接在我的应用通知设置上打开

备选

如果有办法以编程方式打开和关闭 "Block notifications",那也可以。

没有 public API 可让您直接深入 link 应用程序的通知设置。

您可以使用 Settings.ACTION_APPLICATION_DETAILS_SETTINGS 深入 link 您的应用程序设置,但这不会直接将您带到通知屏幕。

有一个可能有效的解决方案,但由于它不是官方 API 的一部分,因此不能保证在所有设备上或未来版本的 Android.

if there is a way to turn the "Block notificaations" on and off programatically that would be ok too

绝对不是。允许应用程序以编程方式打开和关闭它的通知违背了让用户控制打开和关闭通知的目的。

Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);

我知道这是一个老问题,但对于那些以后会发现它的人:从 Oreo(API 级别 26)开始,现在有一个针对特定应用程序通知的官方深层链接 Intent设置。

Intent settingsIntent = new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS)
        .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
        .putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName())
        .putExtra(Settings.EXTRA_CHANNEL_ID, MY_CHANNEL_ID);
startActivity(settingsIntent);

EXTRA_CHANNEL_ID 参数是可选的,根据 the docs,将 "highlight that channel." FWIW,从 Android 8.1 开始,我看不出它有任何作用区别。如果您要添加此参数,请确保您的 ActionACTION_CHANNEL_NOTIFICATION_SETTINGS.