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)