Android 11 打开相机
  NLcs1gy52P40 2023年11月02日 64 0

Android 11 打开相机

在Android 11及以上的版本,打开相机成为了开发者们常用的功能之一。本文将介绍如何在Android 11上使用相机,并提供相关代码示例。

权限请求

在使用相机之前,首先需要在AndroidManifest.xml文件中添加相机权限:

<uses-permission android:name="android.permission.CAMERA" />

在Android 11中,需要请求相机权限的同时,还需要请求相关的存储权限。因此,还需要添加以下权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

同时,还需要在代码中动态请求这些权限。

private static final int REQUEST_CODE_PERMISSIONS = 100;
private static final String[] REQUIRED_PERMISSIONS = new String[]{
    Manifest.permission.CAMERA,
    Manifest.permission.READ_EXTERNAL_STORAGE,
    Manifest.permission.WRITE_EXTERNAL_STORAGE
};

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

    if (allPermissionsGranted()) {
        // 权限已经被授予
        openCamera();
    } else {
        // 向用户请求权限
        ActivityCompat.requestPermissions(this, REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS);
    }
}

private boolean allPermissionsGranted() {
    for (String permission : REQUIRED_PERMISSIONS) {
        if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
            return false;
        }
    }
    return true;
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == REQUEST_CODE_PERMISSIONS) {
        if (allPermissionsGranted()) {
            // 权限已经被授予
            openCamera();
        } else {
            // 权限被拒绝
            Toast.makeText(this, "权限被拒绝,无法打开相机", Toast.LENGTH_SHORT).show();
            finish();
        }
    }
}

上述代码首先检查是否已经获取了相机和存储权限。如果权限已经被授予,则调用openCamera()方法打开相机。如果权限尚未被授予,则使用ActivityCompat.requestPermissions()方法请求权限。在onRequestPermissionsResult()方法中处理权限请求结果,如果权限被拒绝,则显示一个Toast消息并结束当前Activity。

打开相机

在获取了相机权限之后,可以使用CameraX库来打开相机。CameraX是一个用于访问相机功能的Jetpack库,它提供了简化的API,可以在不同设备和版本上提供一致的相机体验。

首先,需要在build.gradle文件中添加CameraX库的依赖:

dependencies {
    def camerax_version = "1.0.0-beta11"
    // 添加CameraX依赖
    implementation "androidx.camera:camera-core:$camerax_version"
    implementation "androidx.camera:camera-camera2:$camerax_version"
}

然后,在onCreate()方法中打开相机:

private void openCamera() {
    PreviewView previewView = findViewById(R.id.preview_view);

    // 创建相机实例
    ProcessCameraProvider cameraProvider = null;
    try {
        cameraProvider = ProcessCameraProvider.getInstance(this);
    } catch (Exception e) {
        e.printStackTrace();
    }

    if (cameraProvider != null) {
        // 设置预览的生命周期所有者
        previewView.setImplementationMode(PreviewView.ImplementationMode.COMPATIBLE);
        CameraSelector cameraSelector = new CameraSelector.Builder()
            .requireLensFacing(CameraSelector.LENS_FACING_BACK)
            .build();

        // 设置预览用例
        Preview preview = new Preview.Builder().build();
        preview.setSurfaceProvider(previewView.getSurfaceProvider());

        // 绑定相机生命周期
        Camera camera = cameraProvider.bindToLifecycle(this, cameraSelector, preview);
    }
}

上述代码首先创建了一个PreviewView,用于显示相机预览。然后,通过ProcessCameraProvider.getInstance(this)方法获取相机实例。接下来,使用CameraSelector.Builder()选择相机,默认选择后置相机。然后,创建一个预览用例,并将其与PreviewView绑定。最后,使用cameraProvider.bindToLifecycle()方法将相机与当前Activity的生命周期绑定起来。

总结

本文介绍了在Android 11上打开相机的基本步骤。首先,需要在AndroidManifest.xml文件中添加相机和存储权限。然后,在代码中动态请求这些权限

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  a1POfVYpMOW2   2023年12月23日   137   0   0 flutterciflutterideciide
NLcs1gy52P40