Jadi pada dasarnya apa yang saya coba capai adalah membuka Gallery
di Android dan membiarkan pengguna memilih multiple images
. Sekarang pertanyaan ini telah sering ditanyakan tetapi saya tidak puas dengan jawabannya. Terutama karena saya menemukan sesuatu yang menarik di de docs di IDE saya (saya kembali lagi nanti) dan oleh karena itu saya tidak ingin menggunakan adaptor khusus tetapi hanya yang vanilla.
Sekarang kode saya untuk memilih satu gambar adalah:
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select Picture"), 1);
Sekarang Orang-orang di SO dan situs web lain akan memberi tahu Anda bahwa Anda memiliki 2 opsi:
1) Jangan gunakan ACTION_GET_CONTENT
melainkan ACTION_SEND_MULTIPLE
.
Yang ini tidak berhasil. Yang ini sesuai dengan dokumen untuk sending
file dan bukan retrieving
dan itulah yang dilakukannya. Saat menggunakan ACTION_SEND_MULTIPLE saya mendapat jendela terbuka di perangkat saya di mana saya harus memilih aplikasi untuk mengirim data saya. Bukan itu yang saya inginkan, jadi saya bertanya-tanya bagaimana orang-orang mencapai ini dengan solusi ini .. Apakah saya melewatkan sesuatu?
2) Menerapkan custom Gallery
. Sekarang ini adalah opsi terakhir saya yang akan saya pertimbangkan karena imho bukan itu yang saya cari karena saya harus menatanya sendiri DAN mengapa Anda tidak dapat memilih banyak gambar di galeri vanilla?
Harus ada opsi untuk ini .. Sekarang hal menarik yang saya temukan adalah ini:
Saya menemukan ini di deskripsi dokumen ACTION_GET_CONTENT
.
Jika pemanggil dapat menangani beberapa item yang dikembalikan (pengguna melakukan beberapa pilihan), maka pemanggil dapat menentukan EXTRA_ALLOW_MULTIPLE untuk menunjukkan ini.
Ini cukup menarik. Di sini mereka merujuknya ke kasus penggunaan di mana pengguna dapat memilih beberapa item?
Kemudian mereka mengatakan di dokumen:
Anda dapat menggunakan EXTRA_ALLOW_MULTIPLE untuk memungkinkan pengguna memilih beberapa item.
Jadi ini cukup jelas bukan? Inilah yang saya butuhkan. Tetapi pertanyaan saya berikut ini adalah: Di mana saya bisa meletakkan ini EXTRA_ALLOW_MULTIPLE
? Hal yang menyedihkan adalah bahwa saya tidak dapat menemukan ini tidak di mana dalam panduan developer.android dan juga ini tidak didefinisikan sebagai sebuah konstanta di kelas INTENT.
Ada yang bisa membantu saya dengan ini EXTRA_ALLOW_MULTIPLE
?
sumber
EXTRA_ALLOW_MULTIPLE
memungkinkan Anda memilih beberapa item. Dapatkan URI dengan memanggilgetClipData()
maksud yang dikembalikan dalamonActivityResult
. Satu-satunya masalah adalah widget galeri tidak mengizinkan banyak pilihan. Dalam hal ini mengklik gambar apa pun akan menyelesaikan pemilihan dan Anda bisa mendapatkan URI (dari satu item) dengan memanggilgetData
maksud yang dikembalikanJawaban:
Opsi EXTRA_ALLOW_MULTIPLE disetel pada maksud melalui metode Intent.putExtra ():
Kode Anda di atas akan terlihat seperti ini:
Catatan:
EXTRA_ALLOW_MULTIPLE
opsi ini hanya tersedia di Android API 18 dan lebih tinggi.sumber
Intent.getClipData
. Ini memiliki array Item ClipData.Tentukan variabel-variabel ini di kelas:
Mari Asumsikan bahwa onClick pada tombol itu harus membuka galeri untuk memilih gambar
Kemudian Anda harus mengganti Metode onActivityResult
CATATAN BAHWA: galeri tidak memberi Anda kemampuan untuk memilih multi-gambar jadi kami di sini membuka semua studio gambar yang Anda dapat memilih multi-gambar dari mereka. dan jangan lupa untuk menambahkan izin ke manifes Anda
SANGAT PENTING: getData (); untuk mendapatkan satu gambar tunggal dan saya telah menyimpannya di sini di imageEncoded String jika pengguna memilih multi-gambar maka mereka harus disimpan dalam daftar
Jadi, Anda harus memeriksa mana yang nol untuk menggunakan yang lain
Berharap Anda memiliki usaha yang bagus dan orang lain
sumber
Banyak dari jawaban ini memiliki kesamaan tetapi semuanya kehilangan bagian terpenting yang ada
onActivityResult
, periksa apakahdata.getClipData
nol sebelum memeriksadata.getData
Kode untuk memanggil pemilih file:
Kode untuk memilih semua gambar:
Perhatikan bahwa pemilih Android menyediakan Foto dan Galeri di beberapa perangkat. Foto memungkinkan beberapa gambar dipilih. Galeri mengizinkan hanya satu per satu.
sumber
getData()
terkadang TIDAK null tetapi hanya memiliki satu Uri. Jika Anda ingin menangani saat pengguna memilih banyak file, periksagetClipData()
sebelumnyagetData()
- jika data klip tidak null, pengguna mungkin telah memilih beberapa gambar. Menangani getClipData sebelum getData, tetapi menangani kedua kasus itu penting untuk mendukung perangkat yang berbeda sambil tetap mengizinkan beberapa Uris.Saya harap jawaban ini tidak terlambat. Karena widget galeri tidak mendukung beberapa pilihan secara default, tetapi Anda bisa menyesuaikan tampilan kisi yang menerima maksud multiselect Anda. Opsi lainnya adalah memperluas tampilan galeri dan menambahkan kode Anda sendiri untuk memungkinkan beberapa pilihan.
Ini adalah perpustakaan sederhana yang dapat melakukannya: https://github.com/luminousman/MultipleImagePick
Pembaruan :
Dari komentar @ ilsy, CustomGalleryActivity dalam penggunaan perpustakaan ini
manageQuery
, yang sudah usang, jadi harus diubah menjadigetContentResolver().query()
dancursor.close()
menyukai jawaban inisumber
getContentResolver().query()
di thread UI. Baca tentang Loader dan Support Library..cacheOnDisc()
juga usang jadi gantilah.cacheOnDisc(true)
dengan boolean paramInisialisasi contoh:
Dalam onActivityResult Anda harus menulis ini, blok If-else 2. Satu untuk gambar tunggal dan satu lagi untuk banyak gambar.
Bagian terpenting, Dapatkan Jalur Gambar dari uri :
Semoga ini bisa membantu Anda.
sumber
Saya mendapat null dari
Cursor
. Kemudian ditemukan solusi untuk mengubahnyaUri
menjadiBitmap
yang berfungsi dengan sempurna.Inilah solusi yang berhasil untuk saya:
sumber
Hai, kode di bawah ini berfungsi dengan baik.
Anda ingin klarifikasi lebih lanjut. http://mylearnandroid.blogspot.in/2014/02/multiple-choose-custom-gallery.html
sumber
Saya juga memiliki masalah yang sama. Saya juga ingin agar pengguna dapat mengambil foto dengan mudah sambil mengambil foto dari galeri. Tidak dapat menemukan cara asli untuk melakukan ini, oleh karena itu saya memutuskan untuk membuat proyek sumber terbuka. Ini seperti MultipleImagePick tetapi hanya cara yang lebih baik untuk mengimplementasikannya.
https://github.com/giljulio/android-multiple-image-picker
sumber
Coba IntentChooser yang satu ini . Cukup tambahkan beberapa baris kode, saya melakukan sisanya untuk Anda.
NB: seperti yang disebutkan pada jawaban di atas, EXTRA_ALLOW_MULTIPLE hanya tersedia untuk API> = 18. Dan beberapa aplikasi galeri tidak membuat fitur ini tersedia (Foto dan Dokumen Google (
com.android.documentsui
) berfungsi.sumber
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);