gpt4 book ai didi

android - 如何检查我的应用是否允许显示通知

转载 作者:IT老高 更新时间:2023-10-28 22:00:12 26 4
gpt4 key购买 nike

在 Android 设置中,用户可以根据自己的意愿关闭通知。那么有没有像 isNotificationAllowed() 这样的方法来检查我的应用是否允许显示通知?以及如何打开android设置页面来引导我的用户打开通知?

最佳答案

编辑 - 新答案:

似乎谷歌添加了正确的 API 调用:NotificationManagerCompat.from(context).areNotificationsEnabled()


旧答案:

对于正在查看此问题的任何人,请注意 NotificationListenerService 与“显示通知”不同。 这两个是不同的东西!如果一个应用程序可以访问 NotificationListenerService 并不意味着它的通知被显示,反之亦然。为了检查用户是否阻止了来自您的应用的通知,您可以使用反射:

public class NotificationsUtils {

private static final String CHECK_OP_NO_THROW = "checkOpNoThrow";
private static final String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION";

public static boolean isNotificationEnabled() {

AppOpsManager mAppOps = (AppOpsManager) GlobalContext.getContext().getSystemService(Context.APP_OPS_SERVICE);

ApplicationInfo appInfo = GlobalContext.getContext().getApplicationInfo();

String pkg = GlobalContext.getContext().getApplicationContext().getPackageName();

int uid = appInfo.uid;

Class appOpsClass = null; /* Context.APP_OPS_MANAGER */

try {

appOpsClass = Class.forName(AppOpsManager.class.getName());

Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE, String.class);

Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION);
int value = (int)opPostNotificationValue.get(Integer.class);

return ((int)checkOpNoThrowMethod.invoke(mAppOps,value, uid, pkg) == AppOpsManager.MODE_ALLOWED);

} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return false;
}
}

来源:https://code.google.com/p/android/issues/detail?id=38482

关于android - 如何检查我的应用是否允许显示通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27815782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com