如何获得覆盖请勿打扰设置值?

时间:2018-06-06 15:23:32

标签: android android-notifications

如何在Android中为我自己的软件包应用程序获取覆盖请勿打扰设置状态?

enter image description here

1 个答案:

答案 0 :(得分:7)

documentation不清楚如何显示此选项,只是有可能:

  

在Android 8.0(API级别26)及更高版本上,用户还可以通过逐个频道覆盖“请勿打扰”来允许通过特定于应用的类别(也称为频道)进行通知。 [...]   在运行Android 7.1(API级别25)及以下版本的设备上,用户可以在应用基础上允许通过应用进行通知,而不是逐个频道地进行通知。

但根据我的睾丸,在Android 8.0+上,您只有将importance设置为紧急的通知渠道才有此选项,这与NotificationManager.IMPORTANCE_HIGH相对应。有关创建频道的详细信息,请参阅Create a channel and set the importance

在Android 5.0到7.1上,据说你必须使用setPriority()

  

在Android 8.0(API级别26)及更高版本上,通知的重要性取决于通知发布到的频道的重要性。用户可以在系统设置中更改通知通道的重要性(图12)。在Android 7.1(API级别25)及以下,每个通知的重要性由通知的优先级决定。

所以我尝试使用NotificationCompat.PRIORITY_MAX,但在添加system-wide category之前,我没有看到覆盖请勿打扰选项, 类似的东西:

 NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext(), CHANNEL_ID)
                    .setSmallIcon(R.drawable.ic_launcher_foreground)
                    .setContentTitle("Notification title")
                    .setContentText("Text content")
                    .setPriority(NotificationCompat.PRIORITY_MAX)
                    .setCategory(NotificationCompat.CATEGORY_ALARM);

现在,对于Android 8.0及,要查看用户已对您的频道应用了哪些设置,Read notification channel settings建议您使用canBypassDnd()中的getNotificationChannel()

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        NotificationChannel channel = manager.getNotificationChannel(CHANNEL_ID);
        channel.canBypassDnd();
    }

不幸的是,在7.1下似乎没有任何公共方法来获取该信息; NotificationManagerCompat唯一可用的是areNotificationsEnabled()