【问题标题】:AppOpsManager.OPSTR_GET_USAGE_STATS always returns the value zero (AppOpsManager.MODE_ALLOWED)AppOpsManager.OPSTR_GET_USAGE_STATS 始终返回零值 (AppOpsManager.MODE_ALLOWED)
【发布时间】:2016-04-06 11:11:23
【问题描述】:

我正在使用下面的代码来检查我的应用程序是否启用了使用访问权限。

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

中所述

设备有问题还是我的代码中缺少任何条件?

【问题讨论】:

    标签: android


    【解决方案1】:

    正如我所提到的,这种行为仅在“Lenovo P1a42 设备”中观察到,因此我通过安装“我的数据管理器”应用程序(它像我的应用程序一样使用“usage_access”权限)来交叉验证它设备。

    “我的数据管理器”应用程序还会提示用户启用“usage_access”权限以显示设备中每个应用程序的网络使用情况。但在“Lenovo P1a42 设备”中,该应用程序也不会提示用户启用“usage_access”权限,即使该权限未被授予。

    所以我认为这个测试结束了“联想 P1a42 设备”本身的问题。

    【讨论】:

    • LG 设备也存在这个问题... :-(
    猜你喜欢
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多