在我们的Android应用程序(使用SDK23编译)中,默认情况下,应用程序安装后,“推送通知”设置为“打开”。但当然用户可以手动“关闭”它。
2个问题:
在应用内,使用Android API,是否可能(简而言之,如何?):
检查“推送通知”设置的当前状态是(打开还是关闭)?
类似于我们可以将用户重定向到GPS设备设置,如果GPS“关闭”,如果设置为“关闭”,我们是否还可以将用户重定向到“推送通知设置”,以便用户那么,如果他愿意,可以“打开”它?
令我们惊讶的是(也许我们错了?因此我们在这里寻求您的意见/确认)似乎上述“1”和“2”都不可能??? !!
如果我们错了,我们很可能会欣赏一个短的“简短的一般术语”来实现这一目标。
感谢您输入!
答案 0 :(得分:2)
根据文件,第1是可能的。我没有查看问题的第二部分(将用户带到通知设置)。
要查看通知的当前状态,首先您必须知道您所使用的设备是否低于Oreo。在Oreo下面,它就像在支持库的NoticificationManagerCompat对象上调用areNotificationsEnabled()
一样简单(从版本24.1.0开始提供)。在奥利奥或以上,您需要通过在NotificationChannel对象上调用getImportance()
来检查每个通知渠道。如果停用通知,getImportance()
将返回NotificationManager.IMPORTANCE_NONE
。如果它返回任何其他内容,则会启用它们。这里有一些代码可以完成这项工作:
public boolean areNotificationsEnabled(Context context, String channelId) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if(!TextUtils.isEmpty(channelId)) {
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationChannel channel = manager.getNotificationChannel(channelId);
return channel.getImportance() != NotificationManager.IMPORTANCE_NONE;
}
return false;
} else {
return NotificationManagerCompat.from(context).areNotificationsEnabled();
}
}
希望这有帮助!
答案 1 :(得分:0)
您可以通过此命令检查系统推送是启用还是禁用。
NotificationManagerCompat.from(context).areNotificationsEnabled()
答案 2 :(得分:0)
您可以使用以下命令检查用户是否允许您的应用程序通知:
NotificationManagerCompat.from(context).areNotificationsEnabled()
此一线代码适用于API级别19+。但是,从android O开始,引入了通知通道。这允许用户从应用程序设置屏幕仅禁用特定的通知通道,并且还禁用来自应用程序的所有通知。使用上面的命令,您只能检查整个应用程序(而非特定渠道)是否允许通知。意思是,即使上面的命令给出的值为true
仅当应用程序允许所有通知并且所有现有通知通道均已启用时,下面的代码才返回true
。从API级别19+开始工作,包括从Android O开始所需的更改:
public boolean areNotificationsEnabled() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
if (!manager.areNotificationsEnabled()) {
return false;
}
List<NotificationChannel> channels = manager.getNotificationChannels();
for (NotificationChannel channel : channels) {
if (channel.getImportance() == NotificationManager.IMPORTANCE_NONE) {
return false;
}
}
return true;
} else {
return NotificationManagerCompat.from(context).areNotificationsEnabled();
}
}