Android 使用情况访问权限

问题描述

添加了使用情况访问权限,如果不开启权限就不让进去,但是发现如果不开启,直接点击返回的话,会再次进入页面但是下面的列表数据不出现

问题出现的环境背景及自己尝试过哪些方法

第一次出现(进软件的时候是可以的),但是点击返回之后就一直转圈

clipboard.png

点击返回的时候,打了个这个
I/Timeline: Timeline: Activity_launch_request time:45233510 intent:Intent { act=android.settings.USAGE_ACCESS_SETTINGS }

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

private static final int MY_PERMISSIONS_REQUEST_PACKAGE_USAGE_STATS = 1101;
      
      
    //判断应用是否有读取应用列表权限
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        if (!hasPermission()) {
            startActivityForResult(
                    new Intent(android.provider.Settings.ACTION_USAGE_ACCESS_SETTINGS),
                    MY_PERMISSIONS_REQUEST_PACKAGE_USAGE_STATS);
        }
    }
    


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    //若用户未开启权限,则引导用户开启“Apps with usage access”权限
    try {
        if (requestCode == MY_PERMISSIONS_REQUEST_PACKAGE_USAGE_STATS) {
            if (!hasPermission()) {
                startActivityForResult(new Intent(android.provider.Settings.ACTION_USAGE_ACCESS_SETTINGS), MY_PERMISSIONS_REQUEST_PACKAGE_USAGE_STATS);
            }
        }
    } catch (Exception e) {
        Log.i("e", "e:" + e);
    }

}

//检测用户是否对本app开启了“Apps with usage access”权限
private boolean hasPermission() {
    AppOpsManager appOpsM = (AppOpsManager)
            getSystemService(Context.APP_OPS_SERVICE);
    int mode = 0;
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {
        mode = appOpsM.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS,
                android.os.Process.myUid(), getPackageName());
    }
    return mode == AppOpsManager.MODE_ALLOWED;
}

你期待的结果是什么?实际看到的错误信息又是什么?

用户点击返回后,刷新能够显示正常。

阅读 6.5k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题