今天和同事合作遇到一个问题:当targetSdkVersion = 22 时候在6.0 以上手机运行(做了权限校验)也正常弹出来了询问界面 但是用户不操作依然可以进去,用户拒绝依然进去,然后闪退了。询问之后说忘了 考虑用户拒绝的情况了....好吧 !那这个坑我自己填。
首先在调取相机的时候做如下判断:
//检查权限(6.0以上做权限判断)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkPermission())
openCamera();
else
requestCameraPermission();
} else {
// 6.0 以下
openCamera();
}
下面是我上面的方法:/*** 打开相机 */
private void openCamera() {
// 需要实现 空方法不起作用
}
检查权限/**检查权限/
private boolean checkPermission() {
boolean isCanUse = true;
Camera mCamera = null;
try {
mCamera = Camera.open();
Camera.Parameters mParameters = mCamera.getParameters(); //针对魅族手机
mCamera.setParameters(mParameters);
} catch (Exception e) {
isCanUse = false;
}
if (mCamera != null) {
try {
mCamera.release();
} catch (Exception e) {
e.printStackTrace();
return isCanUse;
}
}
return isCanUse;
}
申请相机权限/**申请权限/ (好想第二次提示询问没用 正在研究)
private void requestCameraPermission() {
Log.i("-", "相机权限未被授予,需要申请!");
// 相机权限未被授予,需要申请!
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.CAMERA)) {
// 如果访问了,但是没有被授予权限,则需要告诉用户,使用此权限的好处
Log.i("", "申请权限说明!");
Snackbar.make(recyclerView, R.string.permission_camera_rationale,
Snackbar.LENGTH_INDEFINITE)
.setAction(R.string.ok, new View.OnClickListener() {
@Override
public void onClick(View view) {
// 这里重新申请权限
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.CAMERA},
REQUEST_CAMERA);
}
})
.show();
} else {
// 第一次申请,就直接申请
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA},
REQUEST_CAMERA);
}
}
权限回调
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == REQUEST_CAMERA) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 已经有权限
OkLogger.e("已经有权限", "已经有权限");
startActivity(new Intent(this, RecordedVideoActivity.class));
} else {
//用户勾选了不再询问
//提示用户手动打开权限
if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
Snackbar.make(recyclerView, R.string.permissions_not_granted,
Snackbar.LENGTH_SHORT).show();
}
}
}
}
以上方法可以实现 每次询问 但效果没有6.0 以上 tag>23 效果好。
网友评论