Saya ingin menulis modul di mana pada klik tombol kamera terbuka dan saya bisa mengklik dan mengambil gambar. Jika saya tidak suka gambar, saya bisa menghapusnya dan mengklik satu gambar lagi dan kemudian pilih gambar dan itu harus kembali dan menampilkan gambar itu dalam aktivitas.
278
Jawaban:
Berikut adalah contoh aktivitas yang akan meluncurkan aplikasi kamera dan kemudian mengambil gambar dan menampilkannya.
Perhatikan bahwa aplikasi kamera itu sendiri memberi Anda kemampuan untuk meninjau / mengambil kembali gambar, dan begitu gambar diterima, aktivitas akan menampilkannya.
Berikut adalah tata letak yang digunakan aktivitas di atas. Ini hanyalah LinearLayout yang berisi Tombol dengan id button1 dan ImageView dengan id imageview1:
Dan satu detail terakhir, pastikan untuk menambahkan:
dan jika kamera opsional untuk fungsionalitas aplikasi Anda. pastikan untuk mengatur harus salah dalam izin. seperti ini
ke manifes.xml Anda.
sumber
<uses-feature/>
denganandroid:required="false"
atribut:<uses-feature android:name="android.hardware.camera" android:required="false"></uses-feature>
Bitmap photo = (Bitmap) data.getExtras().get("data");
tidak ambil gambar yang diambil. Itu mengambil thumbnail dari gambar yang diambil.Pembaruan (2020)
Google telah menambahkan
ActivityResultRegistry
API baru yang "memungkinkan Anda menanganistartActivityForResult()
+onActivityResult()
sertarequestPermissions()
+onRequestPermissionsResult()
aliran tanpa mengesampingkan metode dalam Aktivitas atau Fragmen Anda, membawa peningkatan keamanan jenisActivityResultContract
, dan menyediakan kait untuk menguji aliran ini" - sumber .API ditambahkan di androidx.activity 1.2.0-alpha02 dan androidx.fragment 1.3.0-alpha02 .
Jadi sekarang Anda dapat melakukan sesuatu seperti:
Lihatlah dokumentasi untuk mempelajari cara menggunakan API hasil Aktivitas baru: https://developer.android.com/training/basics/intents/result#kotlin
Ada banyak ActivityResultContracts bawaan yang memungkinkan Anda untuk melakukan berbagai hal seperti memilih kontak, meminta izin, mengambil gambar atau mengambil video. Anda mungkin tertarik dengan ActivityResultContracts.TakePicture yang ditunjukkan di atas.
Perhatikan bahwa androidx.fragment 1.3.0-alpha04 deprecates
startActivityForResult()
+onActivityResult()
danrequestPermissions()
+onRequestPermissionsResult()
API di Fragment. Oleh karena itu tampaknya itulahActivityResultContracts
cara baru untuk melakukan sesuatu mulai sekarang.Jawaban asli (2015)
Butuh beberapa jam untuk menyelesaikannya. Kode ini hampir merupakan copy-paste dari developer.android.com , dengan perbedaan kecil.
Minta izin ini pada
AndroidManifest.xml
:Pada Anda
Activity
, mulailah dengan mendefinisikan ini:Kemudian jalankan ini
Intent
dionClick
:Tambahkan metode dukungan berikut:
Kemudian terima hasilnya:
Apa yang membuatnya berfungsi adalah
MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.parse(mCurrentPhotoPath))
, yang berbeda dari kode dari developer.android.com . Kode asli memberi saya aFileNotFoundException
.sumber
android.os.FileUriExposedException: file:///storage/emulated/0/Pictures/JPEG_20180823_102340_722874009725833047.jpg exposed beyond app through ClipData.Item.getUri()
. ada ide untuk memperbaiki ini? @AlbertVilaCalvostorageDir = Context.getFilesDir();
di tempat FilestorageDir = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES);
. Kalau tidak, saya mendapatkan izin ditolak kesalahan.Ambil foto + Pilih dari Galeri:
sumber
ResultCode == 1
di dalamResultCode == RESULT_OK
?requestCode==1
, membantu mengidentifikasi siapa yang mengajukan permintaan.Saya tahu ini adalah utas yang cukup lama, tetapi semua solusi ini tidak selesai dan tidak berfungsi pada beberapa perangkat ketika pengguna memutar kamera karena data di onActivityResult adalah nol. Jadi di sini adalah solusi yang telah saya uji pada banyak perangkat dan sejauh ini tidak menghadapi masalah.
Pertama-tama deklarasikan variabel Uri Anda dalam aktivitas Anda:
Kemudian buat folder sementara Anda untuk menyimpan gambar yang diambil dan niat untuk mengambil gambar dengan kamera:
Dan sekarang inilah salah satu hal terpenting, Anda harus menyimpan uriFilePath di onSaveInstanceState, karena jika Anda tidak melakukan itu dan pengguna memutar perangkatnya saat menggunakan kamera, uri Anda akan menjadi nol.
Setelah itu, Anda harus selalu memulihkan uri dalam metode onCreate Anda:
Dan inilah bagian terakhir untuk mendapatkan Uri Anda di onActivityResult:
PS Jangan lupa untuk menambahkan izin untuk Kamera dan Ext. penyimpanan tulisan untuk Manifest Anda.
sumber
Di sini Anda dapat membuka kamera atau galeri dan mengatur gambar yang dipilih ke tampilan gambar
Tambahkan izin dalam manifes
Di onCreate ()
Tampilkan kotak dialog opsi (untuk memilih gambar dari kamera atau galeri)
Dapatkan foto dari Galeri
Dapatkan foto dari Kamera
Setelah gambar dipilih atau ditangkap,
Sekarang saatnya menyimpan gambar
Minta izin
sumber
Anda perlu membaca tentang Kamera . (Saya pikir untuk melakukan apa yang Anda inginkan, Anda harus menyimpan gambar saat ini ke aplikasi Anda, lakukan pilih / hapus di sana, dan kemudian ingat kamera untuk mencoba lagi, daripada melakukan coba lagi langsung di dalam kamera.)
sumber
Berikut ini adalah kode yang saya gunakan untuk Mengambil dan Menyimpan Gambar Kamera kemudian menampilkannya ke imageview. Anda dapat menggunakan sesuai dengan kebutuhan Anda.
Anda harus menyimpan gambar Kamera ke lokasi tertentu kemudian mengambil dari lokasi itu lalu mengonversinya menjadi byte-array.
Berikut adalah metode untuk membuka aktivitas pengambilan gambar kamera.
maka metode onActivityResult () Anda harus seperti ini.
Inilah metode getBitmap () yang digunakan di onActivityResult (). Saya telah melakukan semua peningkatan kinerja yang mungkin dilakukan saat mendapatkan bitmap gambar pengambilan kamera.
Semoga ini bisa membantu!
sumber
Ambil foto dari kamera + pilih gambar dari galeri dan atur ke latar belakang tata letak atau tampilan gambar. Berikut ini contoh kode.
sumber
Dalam Aktivitas:
di layout.xml:
dalam manifes.xml:
sumber
Anda dapat menggunakan kamera khusus dengan gambar mini. Anda dapat melihat proyek saya .
sumber
Saya membuat dialog dengan opsi untuk memilih Gambar dari galeri atau kamera. dengan panggilan balik sebagai
Pada awalnya kita menentukan izin di AndroidManifest karena kita perlu menulis toko eksternal sambil membuat file dan membaca gambar dari galeri
Buat file_paths xml di app / src / main / res / xml / file_paths.xml
dengan jalan
Maka kita perlu mendefinisikan file provier untuk menghasilkan Konten uri untuk mengakses file yang disimpan dalam penyimpanan eksternal
Tata Letak Dailog
ImagePicker Dailog
}
Panggil Aktivitas atau fragmen seperti ini Tentukan ImagePicker di Fragmen / Aktivitas
Kemudian panggil dailog saat mengklik tombol
sumber
Ini kode lengkapnya:
Ingatlah untuk menambahkan izin untuk kamera juga.
sumber
Anda dapat menggunakan kode ini untuk pendengar onClick (Anda dapat menggunakan ImageView atau tombol)
Untuk ditampilkan di imageView Anda
Catatan: Masukkan ini ke manifes
sumber
Gunakan kode berikut untuk mengambil gambar menggunakan kamera ponsel Anda. Jika Anda menggunakan Android yang memiliki versi lebih tinggi dari Lolipop, Anda harus menambahkan permintaan izin juga.
sumber
Bitmap photo = (Bitmap) data.getExtras().get("data");
mendapat thumbnail dari kamera. Ada artikel tentang cara menyimpan gambar di penyimpanan eksternal dari kamera. tautan bermanfaatsumber
Silakan, ikuti contoh ini dengan implementasi ini dengan menggunakan dukungan Kotlin dan Andoirdx:
Dan hasil kegiatan:
Anda bisa mendapatkan detail lebih lanjut di https://github.com/joelmmx/take_photo_kotlin.git
Saya harap ini membantu Anda!
sumber