Java &引用;使用统计数据“;权限抛出错误?

Java &引用;使用统计数据“;权限抛出错误?,java,android,algorithm,permissions,usage-statistics,Java,Android,Algorithm,Permissions,Usage Statistics,我一直在使用以检查用户是否已授予“Usage Stats”权限: boolean granted = false; AppOpsManager appOps = (AppOpsManager) this .getSystemService(Context.APP_OPS_SERVICE); int mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS,

我一直在使用以检查用户是否已授予“Usage Stats”权限:

 boolean granted = false;
        AppOpsManager appOps = (AppOpsManager) this
                .getSystemService(Context.APP_OPS_SERVICE);
        int mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS,
                android.os.Process.myUid(), this.getPackageName());

        if (mode == AppOpsManager.MODE_DEFAULT) {
            granted = (this.checkCallingOrSelfPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) == PackageManager.PERMISSION_GRANTED);
        } else {
            granted = (mode == AppOpsManager.MODE_ALLOWED);
        }

        if (!granted) {
            activate.setChecked(false);
            new AlertDialog.Builder(this)
                    .setTitle("First enable permission!")
                    .setMessage("In order to use this app, you must enable the Usage permission")
                    .setPositiveButton("Enable", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
                            startActivity(intent);
                        }
                    }).show();
        }
前面的代码在我的7.0设备上运行良好,但当我模拟4.4 Kitcat设备时,出现以下错误:

 java.lang.IllegalArgumentException: Unknown operation string: android:get_usage_stats
        at android.app.AppOpsManager.strOpToOp(AppOpsManager.java:855)
        at android.app.AppOpsManager.checkOpNoThrow(AppOpsManager.java:885)
        at com.curlybrace.ruchir.keepfocusneverprocrastinateagain.MainActivity.checkPermissions(MainActivity.java:714)
        at com.curlybrace.ruchir.keepfocusneverprocrastinateagain.MainActivity.activated(MainActivity.java:639)
        at com.curlybrace.ruchir.keepfocusneverprocrastinateagain.MainActivity$4.onCheckedChanged(MainActivity.java:241)
        at android.widget.CompoundButton.setChecked(CompoundButton.java:127)
        at android.widget.Switch.setChecked(Switch.java:666)
        at android.widget.CompoundButton.toggle(CompoundButton.java:87)
        at android.widget.CompoundButton.performClick(CompoundButton.java:99)
        at android.view.View$PerformClick.run(View.java:18422)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5001)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)

由此行引起的
int mode=appOps.checkOpNoThrow(AppOpsManager.OPSTR\u GET\u USAGE\u STATS
。似乎没有其他人遇到过这个问题,所以我不确定这里的问题是什么。非常感谢所有帮助。

是在API级别21中添加的。也是在API级别21中添加的。您将无法在API级别19中使用这些。

是在API级别21中添加的。也是在API级别2中添加的。)1.您将无法在API级别19上使用这些数据。

有没有办法查看用户是否有>API级别21的使用统计信息?或者根本没有possible@RuchirBaronia:假设您可以在API级别21+的设备上使用现有代码。您正在API级别19的设备上崩溃。理论上,构建工具应该对您大喊大叫
OPSTR_GET_USAGE_STATS
比您的
minSdkVersion
更新,并且您应该添加适当的逻辑,以便仅在API级别21+的设备上执行此代码。这是有意义的。那么,对于较低版本的设备,适当的逻辑是什么?是否可以在@ruchirboronia上执行相同的操作:是否可以在上执行相同的操作?是否有任何方法可以查看用户是否具有>API级别21的使用情况统计?或者根本没有possible@RuchirBaronia:假设您可以在API级别21+的设备上使用现有代码。您正在API级别19的设备上崩溃。理论上,构建工具应该对您大喊大叫,
optstr\u获得使用权TATS
比您的
minSdkVersion
更新,您应该添加适当的逻辑,以便仅在API级别21+的设备上执行此代码。这是有意义的。那么,对于较低版本的设备,适当的逻辑是什么?是否可以在@RuchirBaronia上执行相同的操作:“是否可以在上执行相同的操作?”