我正在使用以下代码检查我的应用程序是否启用了使用权限。
try {
PackageManager packageManager = context.getPackageManager();
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(context.getPackageName(), 0);
AppOpsManager appOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
int mode = appOpsManager.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, applicationInfo.uid, applicationInfo.packageName);
return (mode == AppOpsManager.MODE_ALLOWED);
} catch (PackageManager.NameNotFoundException e) {
return false;
}
即使我的应用程序禁用了使用访问权限,上述代码也始终返回“ true”值。
IMP注意:这仅在操作系统版本为5.1.1的Lenovo P1a42设备中发生。在所有其他设备中,其工作方式如官方链接http://developer.android.com/reference/android/app/AppOpsManager.html所述
设备是否有问题,或者我的代码中缺少条件?
最佳答案
正如我已经提到的那样,此行为仅在“ Lenovo P1a42设备”中观察到,因此我通过在同一设备中安装“我的数据管理器”应用程序(像我的应用程序一样使用“ usage_access”权限)来交叉验证它。
“我的数据管理器”应用程序还会提示用户启用“ usage_access”权限,以显示设备中每个应用程序的网络使用情况。但是,在“ Lenovo P1a42设备”中,即使未授予该权限,该应用程序也不会提示用户启用“ usage_access”权限。
因此,我认为该测试可以解决“ Lenovo P1a42设备”本身的问题。