You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新版Android Studio中相机权限申请失败,求可行代码方案

Android相机权限申请问题

用户提供的错误截图:
相机权限申请错误截图

当前使用的权限申请代码:

if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 0);

环境信息:Gradle版本7.2,插件版本7.1.3


完整的相机权限申请解决方案(兼容Android 6.0+)

1. 先在Manifest中声明权限

打开AndroidManifest.xml,添加相机及相关必要权限:

<uses-permission android:name="android.permission.CAMERA" />
<!-- 如需保存照片到本地,添加以下兼容权限(Android 13+改用READ_MEDIA_IMAGES) -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />

2. 可运行的权限申请完整代码

以下是Activity中实现的完整流程,包含权限检查、申请、回调处理:

private static final int CAMERA_PERMISSION_CODE = 100;

// 触发权限申请的方法
private void requestCameraPermission() {
    // 检查是否已授权
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
        // 判断是否需要向用户解释权限用途
        if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
            new AlertDialog.Builder(this)
                    .setTitle("需要相机权限")
                    .setMessage("应用需要相机权限来完成拍照功能,请授予权限")
                    .setPositiveButton("确定", (dialog, which) -> {
                        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_PERMISSION_CODE);
                    })
                    .setNegativeButton("取消", null)
                    .show();
        } else {
            // 直接发起权限申请
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_PERMISSION_CODE);
        }
    } else {
        // 已授权,执行相机操作
        startCamera();
    }
}

// 权限申请结果回调
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == CAMERA_PERMISSION_CODE) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            startCamera();
        } else {
            Toast.makeText(this, "相机权限被拒绝,无法使用相机功能", Toast.LENGTH_SHORT).show();
        }
    }
}

// 示例:启动相机的方法
private void startCamera() {
    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (cameraIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(cameraIntent, 200);
    }
}

3. 关键注意点

  • 权限检查时不要用getApplicationContext(),直接使用当前Activity的上下文this,权限申请需要与Activity绑定;
  • 权限请求码要保证唯一,避免和其他请求逻辑冲突;
  • 若在Fragment中申请权限,直接调用Fragment自带的requestPermissions()方法,回调在Fragment的onRequestPermissionsResult中处理。

内容的提问来源于stack exchange,提问作者Shahriar Sakib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 00:56:08