Tutorial : Mengambil Foto di Kamera Android

Berikut ini tutorial sederhana dengan memanfaatkan kamera yang tersedia di device android untuk digunakan pada aplikasi yang ingin dibuat lalu menampilkan preview hasil foto tersebut.

Mengingat bahwa kamera merupakan bagian hardware yang ada di device, maka kita perlu membuat permission untuk mengakses kamera tersebut. Untuk menambahkan permission di android kita bisa menambahnya pada file AndroidManifest.xml.

Secara sederhana mengakses kamera dapat melalui intent. Jika anda sudah memiliki tombol dengan maka event yang dipanggil cukup seperti ini:

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivity(intent);

Dengan intent seperti diatas, maka anda akan langsung menggunakan kamera, namun hanya membuka kamera, tidak ada fungsi tambahan seperti preview hasilnya.

Nah, yang berikut ini juga akan preview hasilnya.

Untuk awalnya kita akan menentukan layout. Karena hanya sederhana, maka layout ini hanya akan menggunakan tombol yang berfungsi untuk mengakses kamera dan imageview untuk menampilkan gambar hasil kamera.

< ?xml version="1.0" encoding="utf-8"?>




Selanjutnya kita menentukan isi main ativity seperti ini:

public class MyActivity extends Activity {
   private static final int REQUEST_IMAGE = 100;
   Button captureButton;
   ImageView imageView;
   
   @Override
   public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
          captureButton = (Button)findViewById(R.id.capture);
          captureButton.setOnClickListener(listener);
          imageView = (ImageView)findViewById(R.id.image);
   }

   @Override
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     if(requestCode == REQUEST_IMAGE && resultCode == Activity.RESULT_OK) {
       //Process and display the image
       Bitmap userImage = (Bitmap)data.getExtras().get("data");
       imageView.setImageBitmap(userImage);
   }
}

   private View.OnClickListener listener = new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
       Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
       startActivityForResult(intent, REQUEST_IMAGE);
   }
 };
}

Dengan coding seperti diatas maka foto yang didapat langsung ditampilkan pada imageView. Hal tersebut dapat dilihat pada code :

       Bitmap userImage = (Bitmap)data.getExtras().get("data");
       imageView.setImageBitmap(userImage);

Jika anda perlu menentukan dimana hasil foto disimpan ke dalam storage, maka kita perlu menambahkan Uri destinasi file, jadi code nya menjadi seperti:

 
public class MyActivity extends Activity {
   private static final int REQUEST_IMAGE = 100;
   Button captureButton;
   ImageView imageView;
   
   @Override
   public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
          captureButton = (Button)findViewById(R.id.capture);
          captureButton.setOnClickListener(listener);
          imageView = (ImageView)findViewById(R.id.image);
   }

   @Override
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     if(requestCode == REQUEST_IMAGE && resultCode == Activity.RESULT_OK) {
       try {
            FileInputStream in = new FileInputStream(destination);
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize = 10; //Downsample by 10x
            Bitmap userImage = BitmapFactory.decodeStream(in, null, options);
            imageView.setImageBitmap(userImage);
       } catch (Exception e) {
            e.printStackTrace();
       }
    }
  }

   private View.OnClickListener listener = new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
       Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
       //Add extra to save full-image somewhere
       intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(destination));
       startActivityForResult(intent, REQUEST_IMAGE);
   }
 };
}

done 🙂

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *