Pertanyaan ini awalnya ditanyakan untuk Android 1.6.
Saya sedang mengerjakan opsi foto di aplikasi saya.
Saya memiliki tombol dan ImageView di Aktivitas saya. Ketika saya mengklik tombol itu akan mengarahkan ulang ke galeri dan saya akan dapat memilih gambar. Gambar yang dipilih akan muncul di ImageView saya.
android
android-image
android-gallery
Praveen
sumber
sumber
Jawaban:
Jawaban yang diperbarui, hampir 5 tahun kemudian:
Kode dalam jawaban asli tidak lagi dapat diandalkan, karena gambar dari berbagai sumber terkadang kembali dengan URI konten yang berbeda, yaitu
content://
alih-alihfile://
. Solusi yang lebih baik adalah dengan hanya menggunakancontext.getContentResolver().openInputStream(intent.getData())
, karena itu akan mengembalikan InputStream yang dapat Anda tangani sesuai pilihan Anda.Misalnya,
BitmapFactory.decodeStream()
berfungsi dengan baik dalam situasi ini, karena Anda juga dapat menggunakan bidang Options dan inSampleSize untuk memperkecil gambar besar dan menghindari masalah memori.Namun, hal-hal seperti Google Drive mengembalikan URI ke gambar yang sebenarnya belum diunduh. Karenanya Anda perlu menjalankan kode getContentResolver () pada utas latar belakang.
Jawaban asli:
Jawaban lain menjelaskan cara mengirim maksud, tetapi mereka tidak menjelaskan dengan baik bagaimana menangani respons. Berikut ini beberapa contoh kode tentang cara melakukannya:
Setelah ini, Anda memiliki gambar yang dipilih disimpan di "yourSelectedImage" untuk melakukan apa pun yang Anda inginkan. Kode ini berfungsi dengan mendapatkan lokasi gambar di basis data ContentResolver, tetapi itu saja tidak cukup. Setiap gambar memiliki sekitar 18 kolom informasi, mulai dari filepath hingga 'tanggal terakhir dimodifikasi' hingga koordinat GPS tempat foto diambil, meskipun banyak bidang yang sebenarnya tidak digunakan.
Untuk menghemat waktu karena Anda sebenarnya tidak membutuhkan bidang lain, pencarian kursor dilakukan dengan filter. Filter bekerja dengan menentukan nama kolom yang Anda inginkan, MediaStore.Images.Media.DATA, yang merupakan path, dan kemudian memberikan string [] ke kueri kursor. Kueri kursor kembali dengan jalur, tetapi Anda tidak tahu di kolom mana itu sampai Anda menggunakan
columnIndex
kode. Itu hanya mendapatkan nomor kolom berdasarkan namanya, yang sama digunakan dalam proses penyaringan. Setelah Anda mendapatkannya, Anda akhirnya dapat mendekode gambar menjadi bitmap dengan baris kode terakhir yang saya berikan.sumber
Mulai niat
Hasil proses
Atau, Anda juga dapat melakukan downsample gambar Anda untuk menghindari kesalahan OutOfMemory.
sumber
int scale = 1; for ( ; bfOptions.outWidth / scale > TARGET_SIZE && bfOptions.outWidth > TARGET_SIZE; scale*=2);
Anda harus memulai maksud galeri untuk hasilnya.
Kemudian masuk
onActivityForResult
, panggilintent.getData()
untuk mendapatkan Uri Gambar. Maka Anda perlu mendapatkan Gambar dari ContentProvider.sumber
Ini adalah kode yang diuji untuk gambar dan video.Ini akan bekerja untuk semua API kurang dari 19 dan lebih besar dari 19 juga.
Gambar:
Video:
.
sumber
Lakukan ini untuk meluncurkan galeri dan memungkinkan pengguna untuk memilih gambar:
Kemudian dalam
onActivityResult()
penggunaan Anda URI dari gambar yang dikembalikan untuk mengatur gambar di ImageView Anda.sumber
sumber
sumber
Untuk beberapa alasan, semua jawaban di utas ini, di
onActivityResult()
coba untuk memposting proses yang diterimaUri
, seperti mendapatkan jalur nyata gambar dan kemudian gunakanBitmapFactory.decodeFile(path)
untuk mendapatkanBitmap
.Langkah ini tidak perlu. The
ImageView
kelas memiliki metode yang disebutsetImageURI(uri)
. Berikan uri Anda padanya dan Anda harus selesai.Untuk contoh kerja yang lengkap, Anda dapat melihatnya di sini: http://androidbitmaps.blogspot.com/2015/04/loading-images-in-android-part-iii-pick.html
PS:
Mendapatkan
Bitmap
dalam variabel yang terpisah akan masuk akal dalam kasus-kasus di mana gambar yang akan dimuat terlalu besar untuk muat dalam memori, dan operasi penurunan skala diperlukan untuk mencegahOurOfMemoryError
, seperti yang ditunjukkan dalam jawaban @siamii.sumber
sebut metode selectImage seperti-
sumber
sumber