您的位置:首页 > 移动开发 > Android开发

android权限申请

2017-11-07 00:00 567 查看
摘要: 个人笔记仅供参考

我主要是给自己做下笔记,方便下次使用

我把权限的管理封装在了BaseActivity,下面我就主要贴代码

private int REQUEST_CODE_PERMISSION;
/**
* 请求权限
* @param permissions 请求的权限
* @param requestCode 请求权限的请求码
*/
public void requestPermission(String[] permissions, int requestCode) {
REQUEST_CODE_PERMISSION = requestCode;
if (checkPermissions(permissions)) {
permissionSuccess(REQUEST_CODE_PERMISSION);
} else {//如果权限没有授权,就弹窗询问用户
List<String> needPermissions = getDeniedPermissions(permissions);
ActivityCompat.requestPermissions(this, needPermissions.toArray(new String[needPermissions.size()]), REQUEST_CODE_PERMISSION);
}
}

/**
* 检测所请求的权限是否都已授权
*
* @param permissions
* @return
*/
private boolean checkPermissions(String[] permissions) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return true;
}
for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(this, permission) !=
PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}

/**
* 获取权限集中需要申请权限的列表
*
* @param permissions
* @return
*/
private List<String> getDeniedPermissions(String[] permissions) {
List<String> needRequestPermissionList = new ArrayList<>();
for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(this, permission) !=
PackageManager.PERMISSION_GRANTED ||
ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
needRequestPermissionList.add(permission);
}
}
return needRequestPermissionList;
}

/**
* 系统请求权限回调,点击允许拒绝后的回调
*
* @param requestCode
* @param permissions
* @param grantResults
*/
//    @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CODE_PERMISSION) {
if (verifyPermissions(grantResults)) {//获取权限成功
permissionSuccess(REQUEST_CODE_PERMISSION);
} else {//获取权限失败
permissionFail(REQUEST_CODE_PERMISSION);
}
}
}

/**
* 确认所有的权限是否都已授权
*
* @param grantResults
* @return
*/
private boolean verifyPermissions(int[] grantResults) {
for (int grantResult : grantResults) {
if (grantResult != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
/**
* 获取权限成功
* @param requestCode
*/
public void permissionSuccess(int requestCode) {

}
/**
* 获取权限失败
* @param requestCode
*/
public void permissionFail(int requestCode) {

}

在其它子类activity中的使用,这里拿申请sd卡权限举例

private String[] needPermissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestPermission(needPermissions,0x0001);
}

@Override
public void permissionFail(int requestCode) {
super.permissionFail(requestCode);
switch (requestCode) {
case 0x0001:
Toast.makeText(this, "请开启读写sd卡权限", Toast.LENGTH_SHORT).show();
break;
}
}

@Override
public void permissionSuccess(int requestCode) {
super.permissionSuccess(requestCode);
switch (requestCode) {
case 0x0001:
//do();做自己想做的工作
break;
}
}

还有一些相机权限适配等,有时间了再写
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息