Framework Android mencakup dukungan untuk berbagai kamera dan fitur kamera yang tersedia di perangkat, yang memungkinkan Anda untuk mengambil gambar dan video di aplikasi. Dokumen ini membahas pendekatan cepat dan sederhana untuk pengambilan gambar dan video, serta menguraikan pendekatan lanjutan untuk menciptakan pengalaman kamera kustom bagi pengguna Anda. Show
Catatan: Halaman ini menjelaskan class PertimbanganSebelum mengaktifkan aplikasi untuk menggunakan kamera pada perangkat Android, Anda harus mempertimbangkan beberapa pertanyaan tentang bagaimana aplikasi Anda bermaksud menggunakan fitur hardware ini.
Dasar-dasarFramework Android mendukung pengambilan gambar dan video melalui android.hardware.camera2 Paket ini adalah API utama untuk mengontrol kamera perangkat. Dapat digunakan untuk mengambil gambar
atau video saat membuat aplikasi kamera.Camera Class ini adalah API lebih lama yang tidak digunakan lagi untuk mengontrol kamera perangkat.SurfaceView Class ini digunakan untuk menyajikan pratinjau kamera langsung kepada pengguna.MediaRecorder Class ini digunakan untuk merekam video dari kamera.Intent Jenis tindakan intent MediaStore.ACTION_IMAGE_CAPTURE atau MediaStore.ACTION_VIDEO_CAPTURE dapat digunakan untuk mengambil gambar atau video tanpa langsung menggunakan objek
Camera .Deklarasi manifesSebelum memulai pengembangan pada aplikasi dengan Camera API, pastikan manifes Anda memiliki deklarasi yang sesuai untuk mengizinkan penggunaan hardware kamera dan fitur terkait lainnya.
Menggunakan aplikasi kamera yang adaCara cepat untuk mengaktifkan pengambilan gambar atau video di aplikasi Anda tanpa banyak kode tambahan
adalah dengan menggunakan Membuat aplikasi kameraBeberapa developer mungkin memerlukan antarmuka pengguna kamera yang disesuaikan dengan tampilan aplikasi mereka atau menyediakan fitur khusus. Menulis kode pengambilan gambar Anda sendiri dapat memberikan pengalaman yang lebih menarik bagi pengguna Anda. Catatan: Panduan berikut ini untuk Langkah umum untuk membuat antarmuka kamera kustom bagi aplikasi Anda adalah sebagai berikut:
Hardware kamera adalah sumber daya bersama yang harus dikelola dengan hati-hati agar aplikasi Anda tidak bertabrakan dengan aplikasi lain yang mungkin juga ingin menggunakannya. Bagian berikut membahas cara mendeteksi hardware kamera, cara meminta akses ke kamera, cara mengambil gambar atau video, dan cara merilis kamera setelah aplikasi Anda selesai menggunakannya. Perhatian: Ingatlah untuk merilis objek Mendeteksi hardware kameraJika aplikasi Anda secara khusus tidak membutuhkan kamera menggunakan deklarasi manifes, Anda harus memeriksa untuk melihat apakah kamera tersedia saat runtime.
Untuk melakukan pemeriksaan ini, gunakan metode
Perangkat Android dapat memiliki beberapa kamera, misalnya kamera belakang untuk fotografi dan kamera depan untuk panggilan video. Android 2.3 (API Level 9) dan yang lebih baru memungkinkan Anda memeriksa jumlah kamera yang
tersedia di perangkat menggunakan metode Mengakses kameraJika telah menentukan bahwa perangkat yang menjalankan aplikasi Anda memiliki kamera, Anda harus meminta untuk mengaksesnya dengan mendapatkan instance Untuk mengakses kamera utama,
gunakan metode
Perhatian: Selalu periksa pengecualian saat menggunakan Pada perangkat yang
menjalankan Android 2.3 (API Level 9) atau lebih tinggi, Anda dapat mengakses kamera tertentu menggunakan Memeriksa fitur kameraSetelah Anda mendapatkan akses ke kamera, Anda dapat memperoleh informasi selengkapnya tentang kemampuannya menggunakan metode Membuat class pratinjauAgar pengguna dapat mengambil gambar atau video secara efektif, mereka harus dapat melihat apa yang dilihat kamera perangkat. Class pratinjau kamera adalah Contoh kode berikut menunjukkan cara membuat class pratinjau kamera dasar yang dapat dimasukkan dalam tata letak
Jika ingin menyetel ukuran tertentu untuk pratinjau kamera Anda, setel ini dalam metode Catatan: Dengan diperkenalkannya fitur
Multi-Aplikasi di Android 7.0 (API level 24) dan lebih tinggi, Anda tidak lagi dapat menganggap rasio aspek pratinjau sama dengan aktivitas Anda bahkan setelah memanggil Menempatkan pratinjau dalam tata letakClass pratinjau kamera, seperti contoh yang ditunjukkan pada bagian sebelumnya, harus ditempatkan dalam tata letak suatu aktivitas bersama dengan kontrol antarmuka pengguna lain untuk mengambil gambar atau video. Bagian ini menunjukkan kepada Anda cara membuat tata letak dan aktivitas dasar untuk pratinjau. Kode tata letak berikut memberikan tampilan yang sangat mendasar yang dapat digunakan
untuk menampilkan pratinjau kamera. Dalam contoh ini, elemen <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" > <FrameLayout android:id="@+id/camera_preview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" /> <Button android:id="@+id/button_capture" android:text="Capture" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" /> </LinearLayout> Pada sebagian besar perangkat, orientasi default pratinjau kamera adalah lanskap. Tata letak contoh ini menentukan tata letak horizontal (lanskap) dan kode di bawah ini memperbaiki orientasi aplikasi ke lanskap. Untuk mempermudah dalam merender pratinjau kamera, Anda harus mengubah orientasi aktivitas pratinjau aplikasi Anda menjadi lanskap dengan menambahkan berikut ini ke manifes Anda. <activity android:name=".CameraActivity" android:label="@string/app_name" android:screenOrientation="landscape"> <!-- configure this activity to use landscape orientation --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> Catatan: Pratinjau kamera tidak harus dalam mode lanskap. Mulai di Android 2.2 (API Level 8), Anda dapat menggunakan metode Pada aktivitas untuk tampilan kamera Anda, tambahkan class pratinjau Anda ke elemen
Catatan: Metode Mengambil fotoSetelah membuat class pratinjau dan tata letak tampilan untuk menampilkannya, Anda siap untuk mulai mengambil gambar dengan aplikasi Anda. Dalam kode aplikasi Anda, Anda harus mengatur listener untuk kontrol antarmuka pengguna Anda guna menanggapi tindakan pengguna dengan mengambil gambar. Untuk mengambil gambar, gunakan metode
Pemicu mengambil gambar dengan memanggil metode
Catatan: Anggota Perhatian: Ingatlah untuk merilis objek Mengambil videoPengambilan video menggunakan framework Android membutuhkan pengelolaan objek Catatan: Mulai Android 4.0 (API level 14), panggilan Tidak seperti mengambil gambar dengan kamera perangkat, merekam video membutuhkan urutan panggilan yang sangat khusus. Anda harus mengikuti urutan eksekusi tertentu agar berhasil mempersiapkan dan mengambil video dengan aplikasi Anda, seperti yang dijelaskan di bawah ini.
Catatan: Dimungkinkan untuk menggunakan Tips: Jika aplikasi Anda biasanya digunakan untuk merekam video, setel Mengonfigurasi MediaRecorderSaat menggunakan class
Sebelum Android 2.2 (API Level 8), Anda harus menyetel parameter format output dan format encoding secara langsung, daripada menggunakan
Parameter perekaman video berikut untuk
Memulai dan menghentikan MediaRecorderSaat memulai dan menghentikan perekaman video menggunakan class
Kode contoh berikut menunjukkan cara memasang tombol untuk memulai dan menghentikan perekaman video dengan benar menggunakan kamera dan class Catatan: Saat menyelesaikan rekaman video, jangan rilis kamera atau pratinjau Anda akan dihentikan.
Catatan: Dalam contoh di atas, metode Merilis kameraKamera adalah sumber daya yang digunakan bersama oleh aplikasi pada perangkat. Aplikasi Anda dapat menggunakan kamera setelah mendapatkan instance Untuk merilis instance objek
Perhatian: Jika aplikasi Anda tidak merilis kamera dengan benar, semua upaya berikutnya untuk mengakses kamera, termasuk yang dilakukan oleh aplikasi Anda sendiri, akan gagal dan dapat menyebabkan aplikasi Anda atau lainnya ditutup. File media yang dibuat oleh pengguna seperti gambar dan video harus disimpan ke direktori penyimpanan eksternal perangkat (Kartu SD) untuk menghemat ruang sistem dan memungkinkan pengguna untuk mengakses file-file ini tanpa perangkat mereka. Ada banyak kemungkinan lokasi direktori untuk menyimpan file media pada perangkat, namun hanya ada dua lokasi standar yang harus Anda pertimbangkan sebagai developer:
Kode contoh berikut menunjukkan cara membuat lokasi
Catatan: Untuk membuat URI mendukung profil kerja, pertama konversikan URI file ke URI konten. Kemudian, tambahkan URI konten untuk
Untuk informasi selengkapnya tentang menyimpan file di perangkat Android, lihat Penyimpanan Data. Fitur kameraAndroid mendukung beragam fitur kamera yang dapat Anda kontrol dengan aplikasi kamera, seperti format gambar, mode lampu flash, setelan fokus, dan banyak lagi. Bagian ini mencantumkan fitur-fitur kamera yang umum, dan secara singkat membahas cara menggunakannya. Sebagian besar fitur kamera dapat diakses dan disetel menggunakan objek
Untuk informasi umum tentang
cara menggunakan fitur yang dikontrol melalui Tabel 1. Fitur kamera umum yang diurutkan berdasarkan Android API Level tempat fitur tersebut diperkenalkan.
Catatan: Fitur-fitur ini tidak didukung pada semua perangkat karena perbedaan hardware dan implementasi software. Untuk informasi tentang memeriksa ketersediaan fitur pada perangkat tempat aplikasi Anda berjalan, lihat Memeriksa ketersediaan fitur. Memeriksa ketersediaan fiturHal pertama yang harus dipahami saat menetapkan untuk menggunakan fitur kamera pada perangkat Android adalah tidak semua fitur kamera didukung pada semua perangkat. Selain itu, perangkat yang mendukung fitur tertentu dapat mendukungnya ke level yang berbeda atau dengan opsi yang berbeda. Oleh karena itu, bagian dari proses pengambilan keputusan saat Anda mengembangkan aplikasi kamera adalah memutuskan fitur kamera apa yang ingin Anda dukung dan pada level apa. Setelah membuat keputusan itu, Anda harus merencanakan untuk memasukkan kode dalam aplikasi kamera yang memeriksa apakah hardware perangkat mendukung fitur-fitur tersebut dan gagal dengan baik jika fitur tidak tersedia. Anda dapat memeriksa ketersediaan fitur kamera dengan mendapatkan instance objek parameter kamera, dan memeriksa metode yang relevan. Contoh kode berikut menunjukkan cara mendapatkan objek
Anda dapat menggunakan teknik yang ditunjukkan di atas untuk sebagian besar fitur kamera. Objek Jika aplikasi memerlukan fitur kamera tertentu agar berfungsi dengan benar, Anda dapat memintanya melalui penambahan pada manifes aplikasi Anda. Saat Anda mendeklarasikan penggunaan fitur kamera tertentu, seperti flash dan autofocus, Google Play membatasi aplikasi Anda agar tidak diinstal pada perangkat yang tidak mendukung fitur ini. Untuk daftar fitur kamera yang dapat dideklarasikan dalam manifes aplikasi Anda, lihat manifes Referensi Fitur. Menggunakan fitur kameraSebagian besar
fitur kamera diaktifkan dan dikontrol menggunakan objek
Teknik ini berfungsi untuk
hampir semua fitur kamera, dan sebagian besar parameter dapat diubah kapan saja setelah Anda mendapatkan instance objek Penting: Beberapa fitur kamera tidak dapat diubah sesuka hati. Secara khusus, mengubah ukuran atau orientasi pratinjau kamera mengharuskan Anda terlebih dahulu menghentikan pratinjau, mengubah ukuran pratinjau, lalu memulai ulang pratinjau. Memulai dengan orientasi pratinjau Android 4.0 (API Level 14) dapat diubah tanpa memulai ulang pratinjau. Fitur kamera lainnya memerlukan lebih banyak kode untuk diimplementasikan, termasuk:
Garis besar singkat cara mengimplementasikan fitur-fitur ini disediakan di bagian berikut. Pengukuran dan area fokusDalam beberapa skenario fotografi, pemfokusan otomatis dan pengukuran cahaya mungkin tidak menghasilkan hasil yang diinginkan. Mulai Android 4.0 (API Level 14), aplikasi kamera Anda dapat memberikan kontrol tambahan untuk memungkinkan aplikasi atau pengguna Anda menentukan area dalam gambar yang akan digunakan untuk menentukan fokus atau pengaturan level cahaya dan meneruskan nilai-nilai ini ke hardware kamera untuk digunakan dalam mengambil gambar atau video. Area untuk pengukuran dan fokus berfungsi sangat mirip dengan fitur kamera lainnya, karena Anda mengontrolnya melalui metode pada objek
Objek Bidang Gambar 1. Garis merah menggambarkan sistem koordinat untuk menentukan Batas-batas sistem koordinat ini selalu sesuai dengan tepi luar gambar
yang terlihat di pratinjau kamera dan tidak menyusut atau melebar dengan level zoom. Demikian pula, rotasi pratinjau gambar menggunakan Deteksi wajahUntuk gambar yang menyertakan orang, wajah biasanya merupakan bagian terpenting dari gambar, dan harus digunakan untuk menentukan fokus dan imbangan putih saat mengambil foto. Framework Android 4.0 (API Level 14) menyediakan API untuk mengidentifikasi wajah dan menghitung setelan gambar menggunakan teknologi pengenalan wajah. Catatan: Saat fitur deteksi wajah berjalan, Menggunakan fitur deteksi wajah dalam aplikasi kamera Anda memerlukan beberapa langkah umum:
Fitur deteksi wajah tidak didukung di semua perangkat. Anda dapat memeriksa apakah fitur ini didukung dengan memanggil Agar diberi tahu dan merespons deteksi wajah, aplikasi kamera Anda harus mengatur listener untuk peristiwa deteksi wajah. Untuk melakukan ini, Anda harus membuat class listener yang mengimplementasikan
antarmuka
Setelah membuat class ini, lalu tetapkan ke objek
Aplikasi Anda harus memulai fungsi deteksi wajah setiap kali memulai (atau memulai ulang) pratinjau kamera. Buat metode untuk memulai deteksi wajah sehingga Anda dapat memanggilnya sesuai kebutuhan, seperti yang ditunjukkan pada kode contoh di bawah ini.
Anda harus memulai deteksi wajah setiap kali Anda memulai
(atau memulai ulang) pratinjau kamera. Jika Anda menggunakan class pratinjau yang ditunjukkan dalam Membuat class pratinjau, tambahkan metode
Catatan: Ingat untuk memanggil metode ini setelah memanggil Video time lapseVideo time lapse memungkinkan pengguna untuk membuat klip video yang menggabungkan gambar yang diambil terpisah selang
beberapa detik atau menit. Fitur ini menggunakan Untuk merekam video time lapse dengan
Setelan ini harus dilakukan sebagai bagian dari prosedur konfigurasi yang lebih besar untuk Contoh Android Camera2Video dan Android HcrViewfinder selanjutnya menunjukkan penggunaan API yang tercakup pada halaman ini. Ruang pandang kamera yang memerlukan izinAplikasi yang menjalankan Android 10 (level API 29) atau lebih tinggi harus memiliki izin
Contoh kode tambahanUntuk mendownload contoh aplikasi tentang dasar Camera2, lihat Contoh Dasar Android Camera2. Untuk mendownload aplikasi contoh tentang Camera2 raw, lihat Contoh Android Camera2Raw. |