本篇主要记下使用过程中遇到的一个问题,项目中使用如下代码对检查权限是否被授予:

public boolean checkSelfPermissions(String... permissions) {

ArrayList lackPermissions = new ArrayList<>();

for (String permission : permissions) {

if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {

lackPermissions.add(permission);

}

}

if (!lackPermissions.isEmpty()) {

//requestPermissions(permissionList.toArray(new String[permissionList.size()]));

return false;

}else {

return true;

}

}

一直也没出现问题,直至昨天遇到了异常,排查发现位置权限未授予的情况下checkSelfPermissions方法依然返回true,说明ContextCompat.checkSelfPermission没能正常返回。仔细看了下项目发现当前targetSdkVersion 22,又网上确认了下果然这货导致,修改targetSdkVersion >=23即可。

其实仅仅判断权限是否授予,不申请权限的话,也可以通过下面的方式解决:

public boolean selfPermissionGranted(String permission) {

// For Android < Android M, self permissions are always granted.

boolean result = true;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

if (targetSdkVersion >= Build.VERSION_CODES.M) {

// targetSdkVersion >= Android M, we can

// use Context#checkSelfPermission

result = ContextCompat.checkSelfPermission(this, permission)

== PackageManager.PERMISSION_GRANTED;

} else {

// targetSdkVersion < Android M, we have to use PermissionChecker

result = PermissionChecker.checkSelfPermission(this, permission)

== PermissionChecker.PERMISSION_GRANTED;

}

}

return result;

}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐