Mengambil Gambar dengan Kamera | Nougat Supported

Fitur kamera penting sekali kegunaannya dalam sebuah aplikasi, semisal untuk mengambil foto wajah kita untuk dijadikan profile picture atau untuk mengambil gambar makanan untuk kita unggah di instagram dan sebagainya. Namun fitur kamera ini agak berbeda dalam pembuatannya ketika aplikasi diharuskan support android versi nougat.

Bagi developer yang pernah membuat aplikasi yang menggunakan fitur kamera dan memperbarui aplikasinya untuk support android versi nougat, kemungkinan besar aplikasinya akan crash jika kode yang digunakan belum sesuai untuk versi nougat.

Oleh karena itu di tutorial kali ini saya akan membagikan langkah-langkahnya supaya aplikasi dapat mengambil gambar dengan kamera di versi nougat atau di versi lainnya (belum testing semua). Saya juga akan membagikan source code aplikasi yang akan kita buat kali ini pada bagian akhir tutorial, jadi simak terus ya sampai akhir.

Untuk tampilan aplikasinya sangat sederhana, hanya butuh 1 activity dengan tampilan sebagai berikut :

activity_main.xml

content_main.xml

 

Di tampilan di atas terdapat :

  • ImageView untuk menampilkan hasil jepretan dari kamera
  • FloatingActionButton untuk menampilkan kamera

Lalu perlu dibuat sebuah file .xml yang disimpan di folder res/xml, kodenya seperti di bawah :

provider_paths.xml

Lalu tambahkan beberapa kode di manifest :

Permissions

Provider(di dalam application)

 

Untuk kode javanya yaitu sebagai berikut :

MainActivity.java

Penjelasan kode di atas :

  • boolean checkPermission() berisikan kode yang digunakan untuk mengecek permission CAMERA dan WRITE_EXTERNAL_CODE. Akan bernilai true jika 2 permission tersebut disetujui.
  • void Show(int requestCode), fungsi ini berisikan kode untuk menampilkan kamera. Parameter requestCode bertipe int yang digunakan untuk menyeleksi nilai balikan dari kamera di fungsi onActivityResult. Lalu di fungsi ini terdapat pemanggilan fungsi lain yaitu createImageFile().
  • File createImageFile() ini fungsinya untuk membuat file temporary yang nantinya akan berisi gambar yang kita ambil dari kamera.
  • Bitmap getCurrentPhotoBitmap() ini fungsinya untuk mendecode file dari path yang dibuat dari fungsi createImageFile(). Nilai kembaliannya berupa Bitmap.
  • Bitmap scaleBitmap(Bitmap bitmap, float scaleRatio), fungsi ini berguna untuk mengubah ukuran gambar sesuai dengan skala yang dimasukkan.
  • Gambar yang diambil dari kamera akan ditangkap pada fungsi onActivityResult().

Kode ini masih terdapat bug ketika mengambil gambar terlalu cepat maka nilai kembalian akan null. Jika Anda menemukan cara bagaimana mengatasinya, mungkin bisa share di kolom komentar di bawah.

Kode bisa dilihat diĀ https://github.com/andevindo/nougat-camera