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