Android M系统调用相机失败求助:配置权限后仍无法打开相机
Android M系统调用相机权限拒绝问题解决方案
别慌,你这个问题在Android 6.0(M)系统里太常见了——因为从这个版本开始,Android引入了动态权限申请机制,光在Manifest里加权限配置根本不够,必须在运行时主动向用户要权限才行!我给你一步步拆解解决方案:
1. 先确认Manifest里的权限配置
首先确保你已经在AndroidManifest.xml中添加了相机相关权限:
<!-- 相机权限 --> <uses-permission android:name="android.permission.CAMERA" /> <!-- 声明需要相机硬件特性 --> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" />
2. 在代码中添加动态权限检查与申请逻辑
在你的TambahLaporActivity里,修改相机按钮的点击事件,先检查权限再启动相机:
// 假设这是你相机按钮的点击事件方法 public void onCameraButtonClick(View view) { // 检查是否已获得相机权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { // 未授权,向用户申请相机权限 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA); } else { // 已授权,直接启动相机 startCamera(); } } // 封装启动相机的逻辑 private void startCamera() { Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 先判断是否有相机应用能处理这个Intent,避免崩溃 if (cameraIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(cameraIntent, REQUEST_CAMERA); } else { Toast.makeText(this, "设备未安装相机应用", Toast.LENGTH_SHORT).show(); } }
3. 处理权限申请的回调结果
重写onRequestPermissionsResult方法,根据用户的授权结果做对应处理:
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); // 判断是否是相机权限的申请回调 if (requestCode == REQUEST_CAMERA) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 用户同意授权,启动相机 startCamera(); } else { // 用户拒绝授权,提示用户需要权限才能使用相机 Toast.makeText(this, "需要相机权限才能完成拍照操作", Toast.LENGTH_SHORT).show(); } } }
额外提醒
如果你的需求是拍摄照片后保存到外部存储,还需要申请WRITE_EXTERNAL_STORAGE权限(同样需要动态申请),别忘了在Manifest里也加上对应的配置哦!
内容的提问来源于stack exchange,提问作者Qube
相关产品推荐
相关产品推荐

