Apa yang saya coba lakukan tampaknya sangat sederhana, tetapi setelah beberapa hari mencari saya tidak bisa mengetahuinya.
Saya memiliki aplikasi yang memungkinkan pengguna untuk memilih beberapa (hingga 5) gambar. Saya menggunakan ImageView
. Ketika pengguna mengklik pada ImageView
, saya ingin mengizinkan mereka opsi untuk
- Pilih gambar dari galeri, atau
- Gunakan kamera untuk mengambil gambar.
Saya mulai dengan menggunakan ACTION_GET_CONTENT
niat, dan itu berhasil dengan baik untuk sampai ke galeri. Jadi saya mencoba menggunakan ACTION_PICK_ACTIVITY
maksud untuk memungkinkan pengguna memilih kamera atau galeri:
Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY);
Intent gallIntent=new Intent(Intent.ACTION_GET_CONTENT);
gallIntent.setType("image/*");
Intent camIntent = new Intent("android.media.action.IMAGE_CAPTURE");
pickIntent.putExtra(Intent.EXTRA_INTENT, camIntent);
pickIntent.putExtra(Intent.EXTRA_INTENT, gallIntent)
pickIntent.putExtra(Intent.EXTRA_TITLE, "Select Source");
startActivityForResult(pickIntent, IMAGE_SELECTOR);
Tapi sepertinya saya hanya bisa menambahkan satu EXTRA_INTENT
. Menu muncul seperti yang diharapkan, tetapi satu-satunya pilihan adalah Galeri dan File .... no Camera).
Apakah ada cara yang lebih baik / lebih mudah untuk melakukan ini yang saya lewatkan? Terima kasih atas bantuannya.
Jawaban:
Anda harus membuat dialog pemilih Anda sendiri menggabungkan kedua hasil resolusi maksud.
Untuk melakukan ini, Anda perlu meminta PackageManager dengan PackageManager.queryIntentActivities () untuk kedua maksud asli dan membuat daftar akhir dari Maksud yang mungkin dengan satu Maksud baru untuk setiap kegiatan yang diambil seperti ini:
(Saya menulis ini langsung di sini jadi ini mungkin tidak dapat dikompilasi)
Kemudian, untuk info lebih lanjut tentang membuat dialog khusus dari daftar, lihat https://developer.android.com/guide/topics/ui/dialogs.html#AlertDialog
sumber
Cara meluncurkan Intent tunggal untuk memilih gambar dari Galeri atau Kamera, atau aplikasi apa pun yang terdaftar untuk menelusuri sistem file.
Daripada membuat Dialog dengan daftar opsi Intent, lebih baik menggunakan Intent.createChooser untuk mendapatkan akses ke ikon grafis dan nama pendek dari berbagai 'Kamera', 'Galeri' dan bahkan aplikasi browser filesystem Pihak Ketiga. seperti 'Astro', dll.
Ini menjelaskan cara menggunakan niat pemilih standar dan menambahkan maksud tambahan untuk itu.
sumber
final String fname = Utils.getUniqueImageFilename();
tidak bekerja ... ia mengatakanUtils cannot be resolved
:(Utils.getUniqueImageFilename()
adalah metode saya sendiri untuk menghasilkan nama file yang unik. Ada banyak cara untuk melakukannya. Salah satu yang paling sederhana adalah menggunakan sesuatu seperti"img_"+ System.currentTimeMillis() + ".jpg"
. Yang lain adalahFile.createTempFile()
.if (data == null || data.getData() == null)
.Saya menemukan ini . Menggunakan:
untuk salah satu maksud menunjukkan kepada pengguna pilihan untuk memilih 'dokumen' di Android 4, yang menurut saya sangat membingungkan. Menggunakan ini sebagai gantinya menunjukkan opsi 'galeri':
sumber
Saya juga memiliki masalah ini dan apa yang saya lakukan adalah membuat AlertDialog dan menggunakan metode setItems () bersama dengan pendengar DialogInterface:
sumber
Saya telah menggabungkan beberapa solusi untuk membuat util lengkap untuk memilih gambar dari Galeri atau Kamera. Ini adalah fitur util ImagePicker (juga dalam lib Github ):
Tangkapan layar:
Sunting : Berikut adalah fragmen kode untuk mendapatkan Intent gabungan untuk Galeri dan aplikasi Kamera bersama. Anda dapat melihat kode lengkap di ImagePicker util (juga di lib Github ):
sumber
getRotationFromCamera
(ImagePicker.java
) dan apa nilai itu kembali? Di ponsel mana Anda menguji?boolean isCamera = (imageReturnedIntent == null || imageReturnedIntent.getData() == null);
kode ini akan membantu Anda, karena ada dua tombol satu untuk Kamera dan satu lagi untuk Galeri, dan Gambar akan ditampilkan di ImageView
https://github.com/siddhpuraamitr/Choose-Image-From-Gallery-Or-Camera
sumber
Bagi mereka yang mendapatkan kesalahan pada 4.4 ke atas saat mencoba menggunakan pemilihan Gambar dapat menggunakan kode di bawah ini.
Daripada membuat Dialog dengan daftar opsi Intent, lebih baik menggunakan Intent.createChooser untuk mendapatkan akses ke ikon grafis dan nama pendek dari berbagai 'Kamera', 'Galeri' dan bahkan aplikasi browser filesystem Pihak Ketiga. seperti 'Astro', dll.
Ini menjelaskan cara menggunakan niat pemilih standar dan menambahkan maksud tambahan untuk itu.
sumber
Ini harus menangani masalah null outputFileUri Tina:
Catatan: Saya menggunakan kode ini di dalam android.support.v4.app.Fragment metode yang diganti dapat berubah tergantung pada versi Fragmen / Aktivitas yang Anda gunakan.
sumber
Anda dapat membuat dialog opsi
Buka kamera:
Galeri Terbuka:
Untuk mendapatkan hasil seleksi
Metode untuk menyimpan gambar yang diambil
sumber
Diselesaikan masalah gambar terlalu besar dan hindari kehabisan memori.
sumber
Menambahkan solusi saya - itu akan mengembalikan panggilan balik apakah itu dari kamera atau dari dapur di samping maksud:
sumber
Anda dapat mencoba ini:
sumber
Ini sederhana dengan menggunakan AlertDialog dan Intent.ACTION_PICK
sumber
Membangun atas jawaban David, dua penny saya pada
onActivityResult()
bagian. Ini menangani perubahan yang diperkenalkan pada 5.1.1 dan mendeteksi apakah pengguna telah memilih satu atau beberapa gambar dari perpustakaan.sumber
Coba dengan cara ini
Kemudian buat metode hasil aktivitas dan lakukan sesuatu seperti ini
Lihat ini http://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample
sumber
Saya telah bekerja keras pada Pemilihan Gambar Kamera atau galeri , dan membuat beberapa kelas util untuk pekerjaan ini. Dengan penggunaan kelas ini, 'Memilih kamera gambar atau galeri terlalu mudah' , hanya butuh 5-10 permen untuk pengembangan Anda.
ImagePickerUtils: - http://www.codesend.com/view/f8f7c637716bf1c693d1490635ed49b3/
BitmapUtils: - http://www.codesend.com/view/81c1c2a3f39f1f7e627f01f67be282cf/
ConvertUriToFilePath: - http://www.codesend.com/view/f4668a29860235dd1b66eb419c5a58b5/
MediaUtils: - https://codeshare.io/5vKEMl
Kita perlu Menambahkan Izin ini dalam bentuk manifest:
Fungsi kelas ini (checkAndRequestPermissions) otomatis memeriksa izin di Android-Marshmallow dan Android - Nougat.
Saya harap ini membantu Anda, Jika ada yang punya saran untuk meningkatkan kelas ini, silakan tambahkan ulasan Anda di komentar.
sumber
Per David Manpearl jawab
https://stackoverflow.com/a/12347567/7226732
kita hanya perlu memodifikasi onActivityResult () seperti
dan atur pengambilan atau pengambilan gambar dalam tampilan gambar.
sumber