举一反三写一个动态获取摄像头的方法,其他的权限也可以稍微修改使用。
在调用摄像头的地方进行判断,系统的版本
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 {
//这里是拒绝给APP摄像头权限,给个提示什么的说明一下都可以。
Toast.makeText(MainActivity.this,"请手动打开相机权限",Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
}
贴一下获取权限的代码:
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之下,不需要动态获取权限。
}
举一反三,可以把其他的动态申请权限的替换来。别忘了清单文件里面注册上权限。