例如摄像头
举一反三写一个动态获取摄像头的方法,其他的权限也可以稍微修改使用。
在调用摄像头的地方进行判断,系统的版本
Build.VERSION.SDK_INT>22
如果系统6.0或以上,就判断有没有权限:
ContextCompat.checkSelfPermission(MainActivity.this,
android.Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED
PackageManager有两个属性PERMISSION_GRANTED,PERMISSION_DENIED;
GRANTED是已经获取到权限,
DENIED是没有获取到权限;
如果有权限了想干嘛干嘛,如果没有,就去获取权限:
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{android.Manifest.permission.CAMERA},CAMERA_OK)
然后获取权限就结束了,然后干嘛呢?获取权限也有个回调:onRequestPermissionsResult
@Override
public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults) {
switch (requestCode){
case CAMERA_OK:
if (grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
}else {
Toast.makeText(MainActivity.this,"请手动打开相机权限",Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
贴一下获取权限的代码:
if (Build.VERSION.SDK_INT>22){
if (ContextCompat.checkSelfPermission(MainActivity.this,
android.Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED){
//先判断有没有权限 ,没有就在这里进行权限的申请
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{android.Manifest.permission.CAMERA},CAMERA_OK)
}else {
//说明已经获取到摄像头权限了 想干嘛干嘛
}
}else {
//这个说明系统版本在6.0之下,不需要动态获取权限。
}
/**
* fragment回调处理权限的结果
* @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 != 1) {
return;
}
if (grantResults.length > 0) {
List<String> deniedPermissionList = new ArrayList<>();
for (int i = 0; i < grantResults.length; i++) {
if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
deniedPermissionList.add(permissions[i]);
}
}
if (deniedPermissionList.isEmpty()) {
//已经全部授权
//permissionAllGranted();
} else {
//勾选了对话框中”Don’t ask again”的选项, 返回false
for (String deniedPermission : deniedPermissionList) {
boolean flag = ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA);
if (!flag) {
//拒绝授权
//permissionShouldShowRationale(deniedPermissionList);
return;
}
}
//拒绝授权
//permissionHasDenied(deniedPermissionList);
}
}
}
举一反三,可以把其他的动态申请权限的替换来。别忘了清单文件里面注册上权限。
转载地址:http://blog.csdn.net/beijinghsj/article/details/53581764