Code mẫu sử dụng Camera2 API tạo ứng dụng chụp ảnh trong android

Code: Default | Auth: 03cd82

Tài liệu tham khảo https://developer.android.com/training/camera2 

Áp dụng thành công tại thời điểm năm 2022

Code hỗ trợ chạy từ phiên bản Android 5.0 (API level 21)  trở lên (Theo tài liệu https://developer.android.com/training/camera2)

Để làm việc với Camera, android cung cấp 3 loại API:  Camera API, Camera2 API và Camera X API. 

Phiên bản Camera API đã cũ và được khuyến cáo loại bỏ

Phiên bản Camera X thì đã số tài liệu hướng dẫn là dựa trên ngôn ngữ Kotlin, nên có khó khăn đối với người dùng java

Bài viết này cung cấp cho bạn code mẫu cơ bản dùng với thư viện Camera2 API

1. Yêu cầu cấp quyền để sử dụng được Camera

a. Camera Permission:

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


b. Camera Features:
< uses-feature android:name="android.hardware.camera">
Trường hợp ứng dụng không yêu cầu bắt buộc dùng camera thì có thể thêm thuộc tính cho quyền này và set về false, sẽ không bắt ép người dùng phải cấp quyền camera

c. Storage Permission:  Quyền lưu trữ file sau khi camera chụp ảnh hoặc ghi hình
< uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
d. Audio Recording Permission: Quyền sử dụng ghi âm trong trường hợp bạn quay video
< uses-permission android:name="android.permission.RECORD_AUDIO">
e. Location Permission: Quyền truy cập định vị nếu bạn muốn đánh dấu địa điểm chụp ảnh, tuy nhiên không bắt buộc.
< uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">

< !-- Needed only if your app targets Android 5.0 (API level 21) or higher. -->
< uses-feature android:name="android.hardware.location.gps">

Chú ý: Các thẻ < uses có dấu cách ở gữa thì xóa dấu cách đi.

2. Xây dựng ứng dụng sử dụng code mẫu

- Tạo project mới, tạo thêm 1 activity đặt tên là TakeImageActivity
- Trên layout của TakeImageActivity bạn thêm vào 1 cái nút bấm + 1 cái TextureView
 

< TextureView
    android:id="@+id/texture"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.124" />

< ImageView
        android:id="@+id/img01"
        android:layout_width="158dp"
        android:layout_height="100dp"
        android:layout_marginTop="460dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"

        />

< Button
    android:id="@+id/btn_takepicture"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Chụp ảnh"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.542"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/texture"
    app:layout_constraintVertical_bias="0.95" />

Chú ý: Thẻ < Button bị thừa dấu cách trước chữ B, bạn cần xóa đi nhé. Thẻ TextureView cũng thế.

- Sử dụng code Java trong file đính kèm.

 3. Trong MainActivity bạn viết code startActivity để gọi activity chụp ảnh

startActivity( new Intent(MainActivity.this, TakeImageActivity.class));

Chạy thử nghiệm ứng dụng, xem các ghi chú trong code, chụp ảnh thử và sau đó mở phần mềm Google Photo ra để xem kết quả.

-------------------------------------

Update: File _update có sửa phần tạo file và thư mục, việc lấy đường dẫn thư mục phải thay thế thành 

Environment.getExternalStoragePublicDirectory(  Environment.DIRECTORY_PICTURES) 
Tập tin đính kèm bài viết: