如何在Android O上启用通知通道,我怎么能以编程方式知道?

时间:2017-10-10 15:21:21

标签: android

查看文档我可以看到检查通知通道的所有属性的方法,但是我找不到检查通道本身是启用还是禁用的方法。

我错过了什么吗?

2 个答案:

答案 0 :(得分:8)

Official Documentation有你的答案:

  

您可以调用以下两种方法来发现用户的设置   已申请通知渠道:

     
      
  • o检索单个通知频道,您可以拨打getNotificationChannel()
  •   
  • 要检索属于您应用的所有通知渠道,您可以致电getNotificationChannels()
  •   
     

拥有NotificationChannel之后,您可以使用诸如的方法   getVibrationPattern()getSound()找出了什么设置   用户目前有。查看用户是否阻止了通知   频道,您可以拨打getImportance()。如果通知渠道是   已屏蔽,getImportance()返回 IMPORTANCE_NONE

因此,getImportance()会告诉您通知渠道是否被阻止。

答案 1 :(得分:0)

这是我的完整代码:

public static boolean isNotificationChannelEnabled(@NonNull String groupId, @NonNull String... channelIds) {
    boolean appNotificationEnable = NotificationManagerCompat.from(AppContext.getContext()).areNotificationsEnabled();
    if (!appNotificationEnable) {
        return false;
    }

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationManager manager = (NotificationManager) AppContext.getContext().getSystemService(Context.NOTIFICATION_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            List<NotificationChannelGroup> groupList = manager.getNotificationChannelGroups();
            for (NotificationChannelGroup group : groupList) {
                if (TextUtils.equals(group.getId(), groupId)) {
                    if (group.isBlocked()) {
                        return false;
                    }
                }
            }
        }

        for (String channelId : channelIds) {
            NotificationChannel channel = manager.getNotificationChannel(channelId);
            if (channel.getImportance() == NotificationManager.IMPORTANCE_NONE) {
                return false;
            }
        }
        return true;
    }

    return false;
}