【发布时间】:2017-02-11 11:07:29
【问题描述】:
我有一个 ListView,其中包含已安装应用程序的列表,对于每个应用程序,我需要知道通知是否已启用。 目前我正在使用以下代码来了解通知是否已启用:
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, appUID, appPackage) == AppOpsManager.MODE_ALLOWED);
我遇到了以下异常:
原因:java.lang.SecurityException: uid 10062 没有 android.permission.UPDATE_APP_OPS_STATS。 W/System.err:在 android.os.Parcel.readException(Parcel.java:1683) W/System.err:在 android.os.Parcel.readException(Parcel.java:1636) W/System.err:在 com.android.internal.app.IAppOpsService$Stub$Proxy.checkOperation(IAppOpsService.java:343)
我已经加入了
<uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS"/>
我仍然遇到同样的错误。 使用什么api可以获取是否被阻止的值
【问题讨论】:
-
您使用哪个 API 版本来构建应用程序以及您在哪个 android 版本上测试您的应用程序?我问这个是因为对于 Android 6 及更高版本中的某些敏感权限,您需要在运行时获得用户的权限。 developer.android.com/training/permissions/requesting.html
-
看看
NotificationManager.getNotificationPolicy()是否为您服务。 Link
标签: android android-notifications android-settings