Malam ini saya istirahat sejenak dari kegiatan rutin nangkring di depan laptop dan akhirnya saya nangkring di kampus. Yaw agak malu sih, secara saya sudah lulus. Pernah kemarin saya nangkring di kampus, kemudian ada yang nyeletuk “Mas, masih betah aja di kampus??”. Haha, saya cuma bisa senyum-senyum. Ada juga yang lebih parah bilang begini, “Mas, jangan sering-sering wifi’an di kampus, bayar inet’nya mahal. (dengan nada guyon).” Saya malah tambah ngakak, mungkin yang ngomong begitu gak tau kisah saya dulu dengan kampus *halah. Kisah seminar nasional yang harusnya dibiayai kampus dan akhirnya saya yang harus bayar dengan uang sendiri. Yaw sekarang hitung-hitung saya nikmati kompensasi uang seminar yang tidak dibayarkan sama kampus ;). Mungkin ada pihak kampus yang tidak senang dengan tulisan saya yang ini? Monggo tidak usah dibaca yaw :p.
Ngomong-ngomong soal kerjaan saya yang beberapa waktu lalu menjadi “joki skripsi”, saya sempat menemui kasus tentang membuat image picker di android. Dulu saya pernah membuatnya, hanya saja sumber gambarnya langsung dari aplikasi file manager. Dan yang kemarin, sumber gambarnya ditambahkan dari kamera. Caranya cukup sederhana, mirip dengan membuat aplikasi kamera yang action-nya memanggil API camera di android. Untuk lokasi penyimpanan dan nama filenya bisa kita sesuaikan sendiri. Yuk ahh, kita langsung aja ke langkah-langkah pembuatannya.
1. Seperti biasa, buat project android baru. Disini IDE nya saya menggunakan Eclipse ADT Bundle, dimana IDE Eclipse sudah id-bundling menjadi satu paket dengan SDK android terbaru beserta ADT-nya.
2. Buka file activity_main.xml yang ada di folder layout. Kita akan membuat sebuah Button dan sebuah ImageView. Ketikkan kode layout di bawah ini :
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10dp" tools:context=".MainActivity" > <Button android:id="@+id/btn_pilih" android:text="Pilih Gambar" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp"/> <ImageView android:id="@+id/img_set" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp"/> </RelativeLayout>
3. Selanjutnya buka file MainActivity.java, kita akan mulai melantunkan coding java disini, haha..
package dlmbg.pckg.image.picker.anroid; import java.io.File; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; /* * Gede Lumbung - 2013 * http://gedelumbung.com * Simple Image Picker from SD Card and Camera */ public class MainActivity extends Activity { private Uri UrlGambar; private ImageView SetImageView; private static final int CAMERA = 1; private static final int FILE = 2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final String [] pilih = new String [] {"Camera", "SD Card"}; ArrayAdapter<String> arr_adapter = new ArrayAdapter<String> (this, android.R.layout.select_dialog_item,pilih); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Pilih Gambar"); builder.setAdapter( arr_adapter, new DialogInterface.OnClickListener() { public void onClick( DialogInterface dialog, int pilihan ) { if (pilihan == 0) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File file = new File(Environment.getExternalStorageDirectory(), "image_picker/img_" + String.valueOf(System.currentTimeMillis()) + ".jpg"); UrlGambar = Uri.fromFile(file); try { intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, UrlGambar); intent.putExtra("return-data", true); startActivityForResult(intent, CAMERA); } catch (Exception e) { e.printStackTrace(); } dialog.cancel(); } else if(pilihan == 1) { Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Pilih Aplikasi"), FILE); } } } ); final AlertDialog dialog = builder.create(); SetImageView = (ImageView) findViewById(R.id.img_set); Button tmb_pilih = (Button) findViewById(R.id.btn_pilih); tmb_pilih.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.show(); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode != RESULT_OK) return; Bitmap bitmap = null; String path = ""; if (requestCode == FILE) { UrlGambar = data.getData(); path = getRealPath(UrlGambar); if (path == null) { path = UrlGambar.getPath(); } else { bitmap = BitmapFactory.decodeFile(path); } } else { path = UrlGambar.getPath(); bitmap = BitmapFactory.decodeFile(path); } Toast.makeText(this, path,Toast.LENGTH_SHORT).show(); SetImageView.setImageBitmap(bitmap); } public String getRealPath(Uri contentUri) { String path = null; String[] images_data = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(contentUri, images_data, null, null, null); if(cursor.moveToFirst()) { int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); path = cursor.getString(column_index); } cursor.close(); return path; } }
Disini skenarionya, ketika kita melakukkan tapping pada tombol, maka akan muncul sebuah dialogbox yang berisikan 2 pilihan yaitu mengambil data dengan sumber dari kamera atau SD Card. Jika memilih kamera, maka akan memanggil Intent untuk API Camera. Setelah kita mengambil gambar, maka gambar akan disimpan di direktori yang sudah kita tentukan pada kode di atas. Secara otomatis aplikasi akan membuatkan folder jika folder belum ada di dalam SD Card/memory. Dengan menggunakan fungsi onActivityResult(), akan dipanggil lokasi/path dari gambar yang baru saja disimpan.
Begitu juga jika memilih sumber gambar dari SD Card, path/lokasi yang dikembalikan langsung berupa alamat dari gambar tersebut. Jadi sumber gambar yang dipasang di ImageView adalah alamat gambar asli dari yang dipilih tadi.
4. Nah, berhubung aplikasi sering force close karena berubahnya orientasi layar (yang dari saat pengambilan gambar menggunakan mode landascape dan setelah selesai mengambil gambar kembali ke mode portrait), maka saya mengakalinya dengan mengatur activity pada AndroidManifest.xml hanya bisa dijalankan dalam mode portrait 😀
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="dlmbg.pckg.image.picker.anroid" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="dlmbg.pckg.image.picker.anroid.MainActivity" android:label="@string/app_name" android:configChanges="orientation" android:screenOrientation="portrait" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Saya mencobanya langsung pada hape android saya, dan hasilnya seperti di bawah ini :
OK deh, sekian dulu postingan iseng saya malam ini. Mungkin di lain waktu saya akan menambahkan fitur cropping untuk gambarnya. Semoga bisa bermanfaat untuk rekan yang sedang mencari refrensi tentang Image Picker di android.
ajarin aku andorid 🙁 asyk bgt ini lo
Makasiii bli gede..
Pas banget nii buat program butuh yang kayak gini..
Ajarin buat ngedit foto yang udah di pick dong.. 😀
kak gimana cara belajar programing biar cepat ngerti
khusunsnya dalam pembuatan aplikasi android ini
tolong kasih tau basic basic nya dong kak
mas aku bisa contact2.. pengen bantuannya buat bikin aplikasi android.. mohon balasannya via email ya nuhun
wah bagus banget gan sudah saya coba gan tapi untuk save belum bisa ya gan?
Kok ga bisa min? Udah saya ketik ulang dan saya perhatikan dengan detail instruksi admin. Saat mengambil gambar dari galery ga muncul apa apa pada program. Apa saya yang salah tapi mohon bantuannya, trims sebelumnya telah berbagi informasi