Android使用CameraKit快速使用相机

  |   0 评论   |   0 浏览   |   夜雨飘零

CameraKit 框架是一款极其简单的 Android 相机框架,代码量比使用原生的少很多。本章教程我们就来使用 CameraKit 搭建一个简单的相机,并实现点击保存图像。

首先添加 CameraKit 库:

dependencies {
    implementation 'com.camerakit:camerakit:1.0.0-beta3.11'
    implementation 'com.camerakit:jpegkit:0.1.0'
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.0'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.0.0'
}

修改页面布局,其中最重要的 com.camerakit.CameraKitView 控件,这个控件可以实时预览图像。有几个重要的参数有说明一下,camera_facing 指定使用相机,camera_focus 设置对焦方式,camera_flash 是否开启闪光灯,camera_permissions 设置动态申请的权限。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.CameraKitActivity">

    <com.camerakit.CameraKitView
        android:id="@+id/camera"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:adjustViewBounds="true"
        android:keepScreenOn="true"
        app:camera_facing="back"
        app:camera_focus="auto"
        app:camera_flash="off"
        app:camera_permissions="camera|storage" />

    <Button
        android:id="@+id/btn"
        android:text="拍照"
        android:layout_alignParentBottom="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</RelativeLayout>

Java 代码就简单很多了,其中要在 Activity 生命周期中也添加 CameraKitView 的什么周期。CameraKit 也提供了动态权限申请接口,使用 cameraKitView.onRequestPermissionsResult() 接口实现动态权限申请,这样就完成了相机预览功能。拍照保存也很简单,使用 cameraKitView.captureImage() 就可以保存图像到本地了。这也太简单了。

import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.Button;

import androidx.appcompat.app.AppCompatActivity;

import com.camerakit.CameraKitView;

import org.jetbrains.annotations.NotNull;

import java.io.File;
import java.io.FileOutputStream;

import kotlin.jvm.internal.Intrinsics;

public class CameraKitActivity extends AppCompatActivity {
    private CameraKitView cameraKitView;

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

        Button button = findViewById(R.id.btn);
        cameraKitView = findViewById(R.id.camera);

        if (!hasPermission()) {
            requestPermission();
        }

        button.setOnClickListener(v ->
                cameraKitView.captureImage((cameraKitView, capturedImage) -> {
                    File savedPhoto = new File(Environment.getExternalStorageDirectory(), "image.jpg");
                    try {
                        FileOutputStream outputStream = new FileOutputStream(savedPhoto.getPath());
                        outputStream.write(capturedImage);
                        outputStream.close();
                    } catch (java.io.IOException e) {
                        e.printStackTrace();
                    }
                })
        );
    }


    @Override
    protected void onStart() {
        super.onStart();
        cameraKitView.onStart();
    }

    @Override
    protected void onResume() {
        super.onResume();
        cameraKitView.onResume();
    }

    @Override
    protected void onPause() {
        cameraKitView.onPause();
        super.onPause();
    }

    @Override
    protected void onStop() {
        cameraKitView.onStop();
        super.onStop();
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NotNull String[] permissions, @NotNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        cameraKitView.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}

最后别忘了添加权限申请。

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

    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.nfc.hce" />

CameraKit 开源地址:https://github.com/CameraKit/camerakit-android


标题:Android使用CameraKit快速使用相机
作者:夜雨飘零
地址:https://blog.doiduoyi.com/articles/1608517340305.html

评论

发表评论