Saya memiliki fragmen di mana saya memiliki recyclerview dan pengaturan data dalam recyclerview ini menggunakan adaptor recyclerview.
Sekarang, saya memiliki tombol di daftar item adaptor yang mengklik di mana saya perlu memeriksa izin READ_EXTERNAL_STORAGE di android untuk model izin baru di android.
Saya telah membuat fungsi baru dalam fragmen adaptor ini untuk memeriksa apakah izin diberikan atau tidak dan meminta izin jika belum diberikan.
Saya telah melewati MyFragment.ini sebagai parameter di adaptor dan memanggil metode fragmen pada tombol klik di adaptor.
Saya telah menggunakan kode di bawah ini untuk memanggil requestPermission secara terpisah.
if(ContextCompat.checkSelfPermission(mContext, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED){
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
ConstantVariables.READ_EXTERNAL_STORAGE);
}
Saya telah mengganti onRequestPermissionsResult
metode dalam fragmen dengan menggunakan kode di bawah ini:
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case ConstantVariables.READ_EXTERNAL_STORAGE:
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, proceed to the normal flow.
startImageUploading();
} else {}
Tapi itu tidak dipanggil, alih-alih metode onRequestPermissionsResult Kegiatan ini dipanggil.
Saya telah mendefinisikan metode onRequestPermissionsResult yang sama dalam aktivitas induk fragmen juga dan ia dipanggil.
Saya tidak bisa menghapus metode onRequestPermissionsResult aktivitas tetapi ingin memanggil metode onRequestPermissionsResult fragmen ketika saya meminta izin dari fragmen. Bagaimana saya bisa melakukan ini? Apakah saya melakukan sesuatu yang salah di sini, tolong bantu saya jika ada yang punya ide di sini.
sumber
Jawaban:
Jawaban yang diedit untuk membahas masalah yang lebih luas
Saya pikir Anda membingungkan metode untuk fragmen dan aktivitas. Punya masalah serupa proyek saya bulan lalu. Silakan periksa apakah Anda akhirnya memiliki yang berikut:
super.onRequestPermissionsResult
dari aktivitasonRequestPermissionsResult
.Lihat apakah itu membantu.
sumber
super.onrequestpermissionresult
pada permintaan penerimaan pada aktivitas, panggil permintaan penerimaan pada fragmen ketika saya meminta izin untuk menggunakanrequestpermissions
. Ini berfungsi dengan baik sekarang, terima kasih banyak .. :)Saya meminta izin lokasi dari sebuah fragmen dan dalam fragmen itu, saya perlu mengubahnya:
untuk ini:
kemudian onRequestPermissionsResult dipanggil dalam fragmen.
sumber
Ini adalah kesalahan umum yang dilakukan orang saat membuat kode untuk marshmallow.
Saat di AppCompatActivity, Anda harus menggunakan ActivityCompat.requestPermissions; Ketika di android.support.v4.app.Fragment, Anda harus menggunakan cukup requestPermissions (ini adalah metode instance dari android.support.v4.app.Fragment) Jika Anda memanggil ActivityCompat.requestPermissions dalam sebuah fragmen, panggilan balik onRequestPermissionsResult dipanggil aktivitas dan bukan fragmen.
Jika Anda memanggil kode ini dari sebuah fragmen, ia memiliki metode requestPermissions sendiri.
Jadi konsep dasarnya adalah, Jika Anda berada dalam suatu Kegiatan, maka panggilan
dan jika dalam Fragmen, panggil saja
Untuk referensi, saya telah memperoleh jawaban dari tautan ini https://www.coderzheaven.com/2016/10/12/onrequestpermissionsresult-not-called-on-fragments/
sumber
Metode
requestPermissions
pada Fragmen membutuhkan API level 23 atau lebih tinggi.Jika aplikasi Anda menargetkan versi yang lebih rendah, Anda dapat menggunakan
Pertama, Anda perlu menambahkan dependensi dukungan-v13:
sumber
ubah ini:
untuk ini :
sumber
ubah izin
sumber
Jawaban yang diterima ini tidak berfungsi untuk saya, jadi saya menemukan solusi sendiri, dijelaskan di bawah:
1. Pertama saya membuat metode, dalam fragmen:
2.Dan kemudian menyebutnya dari aktivitas yang mendasarinya:
Dan itu berfungsi ...
sumber
Verifikasi bahwa baik
PERMISSION_REQUEST_CODE
di dalam maupun dionRequestPermissionsResult
dalam AndaFragment
berisi nilai yang sama.sumber
Untuk tragetSDK 28, cek SDK (> 23) dan permintaan dari fragmen akan berfungsi. ActivityCompat.requestPermissions gagal (jika Anda menetapkan kode permintaan di bawah 65536, dialog izin akan muncul dan jika pengguna mengizinkan izin, izin diberikan, tetapi tidak ada panggilan balik akan terjadi. Tetapi jika Anda menetapkan di atas 65536, ActivityCompat.requestPermissions akan gagal segera. saya tidak tahu alasan di balik logika ini. mungkin bug atau disengaja).
Kode kerja:
sumber
Jika Anda bekerja dengan Kotlin, Anda harus menentukan secara tepat bahwa Anda memanggil metode fragmen, bukan aktivitas
Izin Android M: onRequestPermissionsResult () tidak dipanggil
Minta izin runtime dari v4.Fragment dan minta panggil balik ke Fragment?
sumber
Saya memiliki masalah yang sama. Fragmen Anda dapat diinisialisasi dari tata letak aktivitas. Seperti itu:
main_activty.xml
Masalah ini dipecahkan bagi saya ketika saya digunakan
FragmentTransaction
sebagai gantinyasumber
dalam API di bawah 23 Anda dapat membuat antarmuka dalam aktivitas kemudian mengimplementasikannya dalam fragmen anak dan ketika Anda mendapatkan hasil permintaan izin, aktivitas meneruskannya ke antarmuka yang diimplementasikan dalam fragmen. Ini sederhana ini :)
sumber
Anda dapat memanggil metode Fragmen di bawah ini
sumber
Masalah ini sebenarnya disebabkan oleh NestedFragments. Pada dasarnya sebagian besar fragmen kami telah memperpanjang HostedFragment yang pada gilirannya memperluas CompatFragment. Memiliki fragmen bersarang ini menyebabkan masalah yang akhirnya diselesaikan oleh pengembang lain di proyek.
Dia melakukan beberapa hal tingkat rendah seperti bit switching untuk membuatnya bekerja jadi saya tidak terlalu yakin dengan solusi akhir yang sebenarnya
sumber