Saya ingin memeriksa izin di dalam sebuah fragmen.
kode saya:
// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),
android.Manifest.permission.ACCESS_FINE_LOCATION)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(getActivity(),
new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
1);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
}
tapi onRequestPermissionsResult
tidak dipanggil setelah mengizinkan atau menolak.
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case 1: {
Log.e("test","0");
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
//yes
Log.e("test","1");
Intent intent = new Intent(getActivity(), MapsActivity.class);
intent.putExtra("latitude", 35.694828);
intent.putExtra("longitude", 51.378129);
startActivity(intent);
} else {
utilityFunctions.showSweetAlertWarning(getActivity(),r.getString(R.string.str_warning_title_empty),
r.getString(R.string.str_you_must_allow_this_permission_toast),
r.getString(R.string.str_warning_btn_login));
Log.e("test","2");
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}
android
android-fragments
android-permissions
S.M_Emamian
sumber
sumber
Jawaban:
Saya telah selesai mengikuti untuk memeriksa izin di dalam sebuah fragmen.
if (ActivityCompat.checkSelfPermission(getContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { requestPermissions(getActivity(), new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION); } else { Log.e("DB", "PERMISSION GRANTED"); }
sumber
Beginilah cara saya melakukannya, itu berhasil untuk saya. Terima kasih!
Untuk Aktivitas:
ActivityCompat.requestPermissions(this, permissionsList, REQUEST_CODE);
Untuk Fragmen:
requestPermissions(permissionsList, REQUEST_CODE);
sumber
Fragmen memiliki
requestPermissions()
danonRequestPermissionsResult()
metode, gunakanlah.Tapi
checkSelfPermission()
dariActivityCompat
(tidak perluActivity
, hanyaContext
).if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { requestPermissions( //Method of Fragment new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSIONS_CODE_WRITE_STORAGE ); } else { downloadImage(); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == REQUEST_PERMISSIONS_CODE_WRITE_STORAGE) { if (permissions[0].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE) && grantResults[0] == PackageManager.PERMISSION_GRANTED) { proceedWithSdCard(); } } }
sumber
onRequestPermissionsResult
dipanggil dalam aktivitas bukan fragmen. CobaonRequestPermissionsResult
ganti dalam aktivitas sebagai gantinya.sumber
onRequestPermissionResult
fragmen. Baik penjelasan maupun cara penerimaan hasil terpecah-pecah dijelaskan dalam jawaban ThetNaing Mizo .Menggunakan Kotlin, Anda memanggil
requestPermissions(arrayOf(Manifest.permission.THE_PERMISSION_CODE_YOU_WANT), PERMISSION_REQUEST_CODE)
dan menambahkan penggantian berikut ke fragmen Andaoverride fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out kotlin.String>, grantResults: IntArray): Unit { }
sumber
Untuk menangani izin dalam metode
Fragment
panggilanrequestPermissions
. Jika Anda menggantionRequestPermissionsResult
metode dalam fragmen dan aktivitas, yang berisi fragmen tersebut, pastikan untuk memanggilsuper.onRequestPermissionsResult(...)
metode aktivitas untuk menyebarkan panggilan keonRequestPermissionsResult
metode dalam fragmen.sumber
Yang berhasil bagi saya adalah memanggil metode onRequestPermissionsResult dalam aktivitas di mana fragmen diimplementasikan, bukan memanggilnya dalam fragmen itu sendiri. Di dalam metode onCreateView dalam fragmen:
Button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int permissionCheck = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE); if (permissionCheck != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_MEDIA); }else{ //Do your work fetchMethod(); } } });
Dalam Aktivitas yang membantu mengimplementasikan fragmen, di luar metode onCreate :
@Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_READ_MEDIA: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { fetchMethod(); }else{ Toast.makeText(getApplicationContext(), "Permission not granted!", Toast.LENGTH_SHORT).show(); } break; default: break; } }
sumber
Jika Anda menutup izin aplikasi dari pengaturan, Anda tidak dapat membuka izin dari kode atau versi android Anda yang lebih rendah dari Marshmallow.
Anda dapat memeriksa dokumentasi ini https://developer.android.com/training/permissions/requesting.html Dan ini adalah contohnya https://www.learn2crack.com/2015/10/android-marshmallow-permissions.html
sumber
Saya tersandung menggunakan
checkSelfPermission()
diFragment
dan bertanya-tanya apa pendekatan terbaik untukContext
menjadi null (khusus Kotlin) ... yang harus saya gunakan!!
atau yang lain ?Saya menggunakan sesuatu yang lain berdasarkan kode yang saya temukan di iosched . Lihat contoh di bawah ini, dan ingat, sebelum
Fragment
dilampirkan keActivity
,Context
akan menjadi null.private fun fineLocationPermissionApproved(): Boolean { val context = context ?: return false return PackageManager.PERMISSION_GRANTED == checkSelfPermission( context, Manifest.permission.ACCESS_FINE_LOCATION ) }
sumber