13 Feb 2018

Tutorial Android : Mengolah Photo dari Gallery atau Camera

Bagaimana jika kita ingin membuat sebuah aplikasi dengan menampilkan sebuah photo atau mungkin kita upload photo tersebut yang dimana photo tersebut dapat berasal dari Camera atau Gallery. Nah kita akan mencobanya kali ini.

Langsung saja kita buat satu buah project dengan nama Insert Photo
Membuat Project Insert Photo masrahman28.blogspot.com
Next, next saja dan nanti pilih Empty Activity 
Pilih Activity masrahman28.blogspot.com

Next dan Finish saja, maka kita akan memiliki dua buah file yaitu activity_main.xml dan MainActivity.java sekarang kita buka dulu activity_main.xml dan kita tambahkan satu buah ImageView dan dua buah Button menjadi

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.insertphoto.MainActivity"
    android:orientation="vertical">
    <ImageView
        android:id="@+id/photo"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:scaleType="centerInside" />
      <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_margin="10dp">
          <Button
              android:id="@+id/btnCamera"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:layout_weight="1"
              android:text="Camera"/>
          <Button
              android:id="@+id/btnGallery"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:layout_weight="1"
              android:text="Gallery"/>
      </LinearLayout>
</LinearLayout>

Oke tampilan yang kita butuhkan sudah selesai dibuat, saatnya kita membuka file MainActivity.java
Pertama, kita inisialisasi widget-widget yang kita gunakan dulu ya

ImageView photo;    
Button btnCamera, btnGallery;

@Override
protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     photo = (ImageView)findViewById(R.id.photo);
     btnCamera = (Button)findViewById(R.id.btnCamera);
     btnGallery = (Button)findViewById(R.id.btnGallery);
     btnCamera.setOnClickListener(listener);
     btnGallery.setOnClickListener(listener);
}

Baru kita berikan actionnya ketika button dipilih maka akan membuka Gallery atau Camera yang nanti foto terpilih akan kita masukan ke ImageView, kita ini akan menggunakan fungsi startActivityForResult maka tentu kita juga menggunakan fungsi untuk get RESULT tersebut dengan fungsi onActivityResult menjadi seperti dibawah ini

    View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent;
            switch (view.getId()){
                case R.id.btnCamera:
                    intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    startActivityForResult(intent, REQ_CAM);
                    break;
                case R.id.btnGallery:
                    intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                    startActivityForResult(Intent.createChooser(intent, "Complete action using"), REQ_GAL);
                    break;
            }
        }
    };

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(resultCode==RESULT_OK){
            if(requestCode==REQ_CAM){
                Bitmap bm = (Bitmap)data.getExtras().get("data");
                photo.setImageBitmap(bm);
            }else if(requestCode==REQ_GAL){
                try {
                    Bitmap bm = MediaStore.Images.Media.getBitmap(getContentResolver(), data.getData());
                    photo.setImageBitmap(bm);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

Selesai sudah aplikasi yang kita buat untuk menyisipkan foto baik dari Gallery maupun dari Camera. Silahkan coba dijalankan ya contohnya ini nih
Project Insert Photo masrahman28.blogspot.com

Nah untuk mendapatkan foto dari Camera, selain cara diatas sebenarnya ada cara lainnya yang nantinya secara otomatis foto akan tersimpan. Bagaimana nih caranya? kita harus merubah cara pemanggilan Intent dan Result nya menjadi seperti di bawah ini

    Uri strUricamera;
    View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent;
            switch (view.getId()){
                case R.id.btnCamera:
                    intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    if (intent.resolveActivity(getPackageManager()) != null){
                        File photoFile = null;
                        try {
                            String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
                            String imageFileName = "JPEG_" + timeStamp + "_";
                            File storageDir = Environment.getExternalStoragePublicDirectory(
                                    Environment.DIRECTORY_PICTURES);
                            storageDir.mkdirs();
                            photoFile = new File(android.os.Environment.getExternalStorageDirectory(), imageFileName+".jpg");
                        } catch (Exception ex) {

                        }
                        // Continue only if the File was successfully created
                        if (photoFile != null) {
                            strUricamera = Uri.fromFile(photoFile);
                            intent.putExtra(MediaStore.EXTRA_OUTPUT,
                                    strUricamera);
                            startActivityForResult(intent, REQ_CAM);
                        }
                    }
                    break;
                case R.id.btnGallery:
                    intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                    startActivityForResult(Intent.createChooser(intent, "Complete action using"), REQ_GAL);
                    break;
            }
        }
    };

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(resultCode==RESULT_OK){
            if(requestCode==REQ_CAM){
                try {
                    Bitmap bm = MediaStore.Images.Media.getBitmap(getContentResolver(), strUricamera);
                    photo.setImageBitmap(bm);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }else if(requestCode==REQ_GAL){
                try {
                    Bitmap bm = MediaStore.Images.Media.getBitmap(getContentResolver(), data.getData());
                    photo.setImageBitmap(bm);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

Jika kita menggunakan cara kedua untuk menyisipkan image melalui camera yang akan tersimpan otomatis file tersebut maka kita harus menambahkan permission pada file AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Dan aplikasi pun dapat dijalankan dan image akan tersimpan, untuk lokasi penyimpanan silahkan edit saja untuk merubahnya.

Tidak ada komentar:

Posting Komentar