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

Android Java请求相机权限:缺失导入,求完整代码及依赖说明

完整Android Java相机权限请求实现

1. 权限声明(AndroidManifest.xml)

在AndroidManifest.xml的<manifest>标签内、<application>标签外添加相机权限声明:

<uses-permission android:name="android.permission.CAMERA" />
<!-- 若需拍摄并保存图片,可额外添加以下权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" />
<uses-feature android:name="android.hardware.camera" android:required="false" />

2. 完整Activity代码(含所有导入)

以下是包含相机权限请求逻辑的MainActivity.java完整代码,所有导入均基于AndroidX库:

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private static final int CAMERA_PERMISSION_REQUEST_CODE = 100;
    private static final int CAMERA_REQUEST_CODE = 101;
    private Button openCameraBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        openCameraBtn = findViewById(R.id.open_camera_btn);
        openCameraBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                checkCameraPermission();
            }
        });
    }

    // 检查相机权限状态
    private void checkCameraPermission() {
        if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA)
                != PackageManager.PERMISSION_GRANTED) {
            // 未授权,发起权限请求
            ActivityCompat.requestPermissions(this,
                    new String[]{android.Manifest.permission.CAMERA},
                    CAMERA_PERMISSION_REQUEST_CODE);
        } else {
            // 已授权,直接打开相机
            openCamera();
        }
    }

    // 打开系统相机
    private void openCamera() {
        Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (cameraIntent.resolveActivity(getPackageManager()) != null) {
            startActivityForResult(cameraIntent, CAMERA_REQUEST_CODE);
        } else {
            Toast.makeText(this, "未找到可用相机应用", Toast.LENGTH_SHORT).show();
        }
    }

    // 权限请求结果回调
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == CAMERA_PERMISSION_REQUEST_CODE) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // 用户授权,打开相机
                openCamera();
            } else {
                // 用户拒绝权限,提示引导开启
                Toast.makeText(this, "相机权限被拒绝,无法使用相机功能", Toast.LENGTH_SHORT).show();
            }
        }
    }

    // 相机拍摄结果回调(可选,若需处理拍摄的图片)
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == CAMERA_REQUEST_CODE && resultCode == RESULT_OK) {
            // 此处可处理拍摄得到的图片,例如获取缩略图
            // Bitmap photo = (Bitmap) data.getExtras().get("data");
            Toast.makeText(this, "拍摄成功", Toast.LENGTH_SHORT).show();
        }
    }
}

3. 布局文件(activity_main.xml)

需要在res/layout/activity_main.xml中添加触发按钮:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <Button
        android:id="@+id/open_camera_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="打开相机" />

</LinearLayout>

4. 依赖说明

确保项目已引入AndroidX核心库,若未添加,在app/build.gradle的dependencies块中添加:

dependencies {
    // AndroidX核心依赖
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'androidx.core:core-ktx:1.12.0'
}

添加后点击Sync Now同步项目即可。

关键逻辑说明

  • 权限检查:通过ContextCompat.checkSelfPermission判断是否已获取相机权限
  • 权限请求:未授权时调用ActivityCompat.requestPermissions发起请求
  • 结果处理:在onRequestPermissionsResult中处理用户授权/拒绝的逻辑
  • 相机调用:授权通过后,使用系统相机Intent打开相机应用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:42:57