Saya memperbarui aplikasi kami untuk menggunakan sistem izin runtime M baru. Semuanya berfungsi kecuali untuk onRequestPermissionsResult (). Saya perlu memeriksa izin pada tombol tekan, dan jika itu berhasil, kirim pesan teks. Ketika saya memberikan izin untuk melakukannya, dialog ditutup, tetapi tidak memicu Kirim Teks sampai saya menekan tombol lagi.
Saya telah men-debug dan menetapkan breakpoints dalam metode onRequestPermissionsResult () tetapi tidak pernah masuk ke dalamnya.
Metode ini dipanggil pertama:
private void askForPermission() {
String[] permissions = new String[]{Manifest.permission.SEND_SMS};
ActivityCompat.requestPermissions(getActivity(), permissions, PERMISSIONS_CODE);
}
Dan kemudian panggilan balik saya terlihat seperti ini:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSIONS_CODE) {
for (int i = 0; i < permissions.length; i++) {
String permission = permissions[i];
int grantResult = grantResults[i];
if (permission.equals(Manifest.permission.SEND_SMS)) {
if (grantResult == PackageManager.PERMISSION_GRANTED) {
onPPSButtonPress();
} else {
requestPermissions(new String[]{Manifest.permission.SEND_SMS}, PERMISSIONS_CODE);
}
}
}
}
}
Adakah yang mengalami masalah serupa? Hargai bantuan apa pun dengan ini. Terima kasih
sumber
Fragment.requestPermissions()
, Aktivitas induk sebenarnya menerimaonRequestPermissionsResult()
. (Ini dengan perpustakaan dukungan 23.3.0)Anda dapat mencoba ini:
Jika Anda memanggil kode ini dari sebuah fragmen, ia memiliki metode requestPermissions sendiri. Saya percaya masalahnya adalah Anda memanggil metode statis.
Kiat Pro jika Anda menginginkan bagian
onRequestPermissionsResult()
dalam:FragmentCompat.requestPermissions(Fragment fragment, String[] permissions, int requestCode)
sumber
Saya harap ini berfungsi dengan baik
Untuk Aktivitas:
Untuk Fragmen:
sumber
Saya juga mengalami masalah ini. Jika Anda ingin aktivitas yang menangani izin tidak ada dalam sejarah / akhir-akhir ini, maka Anda akan tergoda untuk mengubah
AndroidManifest.xml
entri Anda .Jika Anda mengatur aktivitas yang Anda panggil
requestPermissions
atauAppCompatActivity.requestPermissions
dengandi
AndroidManifest.xml
kemudian AndaonRequestPermissionsResult()
tidak akan dipanggil. Ini benar jika Aktivitas Anda berasal dariActivity
atauAppCompatActivity
.Ini dapat diperbaiki dengan menghapus kedua flag dari 'AndroidManifest.xml' dan menyelesaikan aktivitas Anda
finishAndRemoveTask()
sebagai gantinya.sumber
Jika Anda memiliki
onRequestPermissionsResult
aktivitas dan fragmen, pastikan untuk memanggilsuper.onRequestPermissionsResult
aktivitas. Tidak diperlukan dalam fragmen, tetapi dalam aktivitas.sumber
FragmentActivity.onRequestPermissionsResult(..)
adalah tempat pemanggilan fragmenonRequestPermissionsResult(..)
diteruskan ke.Jawaban sudah usang silakan merujuk ke: https://developer.android.com/training/permissions/requesting
Di dalam fragmen, Anda perlu menelepon:
Tidak:
sumber
Jika Anda menggunakan requestPermissions dalam fragmen, ia menerima 2 parameter alih-alih 3.
Kamu harus menggunakan
requestPermissions(permissions, PERMISSIONS_CODE);
sumber
Jika karena alasan tertentu Anda telah memperpanjang Aktivitas kustom yang terletak di beberapa pustaka eksternal yang tidak memanggil super, Anda perlu memanggil super Fragmen secara manual. Hubungi kembali permintaan Anda di aktivitas Anda diRequestPermissionsResult.
sumber
Anda memiliki fungsi checkPermissions untuk perangkat Marshmallow pra di FragmentCompat . Saya menggunakan seperti ini:
sumber
Saya telah menemukan bahwa itu penting di mana Anda menelepon
android.support.v4.app.Fragment.requestPermissions
.Jika Anda melakukannya
onCreate()
,onRequestPermissionsResult()
tidak pernah dipanggil.Solusi: Sebut saja
onActivityCreated()
;sumber
onActivityCreated()
kode saya. SDK 23.onPause()
?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
sumber
Ini akan bekerja ..
sumber
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
sumber
FragmentCompat.requestPermissions()
.Saya memiliki masalah yang sama kecuali saya menekan tombol untuk melakukan panggilan, yang memicu panggilanIntent. Saya memeriksa izin terlebih dahulu, jika tidak diberikan saya meminta izin dan padaRequestPermissionResult saya memanggil izin cek dan menelepon lagi.
sumber
Berdasarkan jawaban goodgamerguy solusinya adalah:
sumber
Sebelum Anda memeriksa semuanya sesuai dengan jawaban di atas, pastikan kode permintaan Anda tidak 0 !!!
periksa kode onRequestPermissionsResult () di FragmentActivity.java:
sumber
sumber
Saya punya solusi luar biasa untuk mencapai ini, buat BaseActivity seperti ini.
}
Sekarang Anda dapat memanggil kode untuk meminta izin seperti ini
Sekarang setiap kali ini terjadi di mana saja baik dalam fragmen Anda atau dalam aktivitas apa pun aktivitas dasar akan dipanggil.
Terima kasih
sumber
Anda bisa menggunakannya
requestPermissions(PERMISSIONS, MULTIPLE_PERMISSIONS_CODE);
. Jangan gunakan FragmentCompat jika Anda menggunakan v4.sumber
Detail
Algoritma
modul - kamera, lokasi, ....
fitur
Larutan
Penggunaan dalam Aktivitas (dalam fragmen yang sama)
sumber
Di sini saya ingin menunjukkan kode saya bagaimana saya mengatur ini.
Di sini, di kelas ini saya ingin memeriksa izin yang diberikan atau tidak. Tidak maka saya akan meminta izin dari MainActivity saya seperti
Sekarang dalam metode onCreate Anda perlu memanggil fungsi requestForPermission ().
Itu saja. Anda juga dapat meminta beberapa izin sekaligus.
sumber
PEMBARUAN: melihat jawaban orang lain tentang menelepon
super.onRequestPermissionResult()
dalam Aktivitas dan yang memperbaiki masalah kode permintaan yang saya sebutkan dan menyebut fragmennya padaRequestPermissionResult.abaikan hal ini:
Bagi saya itu adalah panggilan
onRequestPermissionResult
Kegiatan meskipun saya meneleponfragment.requestPermission(...)
, TAPI mengembalikan hasil dengan kode request yang salah (111 berubah menjadi 65647 mengapa ??? Saya tidak akan pernah tahu).Untungnya ini adalah satu-satunya izin yang kami minta di layar itu, jadi saya abaikan saja kode permintaan (tidak punya waktu untuk mencari tahu mengapa itu tidak benar sekarang)
sumber
Saya juga menemui masalah yang bahkan jika Anda memanggil requestPermissions yang benar, Anda masih dapat memiliki masalah ini. Masalahnya adalah bahwa aktivitas orang tua dapat menggantikan metode ini tanpa memanggil super. Tambahkan super dan itu akan diperbaiki.
sumber