Lompat ke konten
A alfach.com

Tutorial : Mengambil Foto di Kamera Android

A alfach.com
2 menit baca

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.

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

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

Java
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.

HTML / XML
< ?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<button android:id="@+id/capture"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Take a Picture"></button>
<imageview android:id="@+id/image"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="centerInside"></imageview>
</linearlayout>

Selanjutnya kita menentukan isi main ativity seperti ini:

Java
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 :

Kode
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:

Java
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 :)

Bacaan terkait

Komentar (0)

Belum ada komentar. Jadilah yang pertama.

Tulis komentar

Komentar akan dimoderasi sebelum tampil.

Tidak akan dipublikasikan.