Ich möchte eine Berechtigung in einem Fragment überprüfen.
mein Code:
// 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.
}
}
aber onRequestPermissionsResult nach Zulassen oder Verweigern nicht aufgerufen.
@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
}
}
Mögliches Duplikat von Laufzeitberechtigungen von v4.Fragment anfordern und Rückruf an Fragment gehen lassen?
– R. Zagórski
23. November 16 um 9:40 Uhr
So habe ich es gemacht, bei mir funktioniert es. Danke!
Fragment requestPermissions erfordert Android M, ist jedoch in FragmentCompat für ältere API-Versionen verfügbar.
– Brian White
27. Januar ’18 um 18:00
23
Richtiger Weg, um Erlaubnis innerhalb eines Fragments anzufordern
– Tarun
30. März ’18 um 7:07
1
Jetzt Standardteil der Fragment-Klasse in der AndroidX-Fragment-Bibliothek, daher sollte FragmentCompat nicht erforderlich sein (bei Verwendung von AndroidX).
– big_m
3. Dezember ’20 um 19:12
5
Ist requestPermissions in Fragment nicht veraltet?
– Charles Woodson
12. März ’21 um 16:40 Uhr
1
requestPermissions ist veraltet , alle aktualisierten Antworten
– Hari Shankar S
29. Mai ’21 um 4:53
Evgeny Nozdrev
Fragment hat requestPermissions() und onRequestPermissionsResult() Methoden, benutze es.
Aber checkSelfPermission() ist von ActivityCompat (benötigt nicht Activity, nur Context).
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();
}
}
}
Fragment requestPermissions erfordert Android M, ist aber in FragmentCompat verfügbar.
– Brian White
27. Januar ’18 um 17:55
AnfängerEntwickler
Ich habe Folgendes getan, um eine Berechtigung in einem Fragment zu überprüfen.
Seit Fragment.requestPermissions ist jetzt veraltet, Google empfiehlt die Verwendung von registerForActivityResult stattdessen.
Ich habe die Anfrage so gemacht:
val permissionLauncher = registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { isGranted ->
if (isGranted) {
// Do if the permission is granted
}
else {
// Do otherwise
}
}
permissionLauncher.launch(Manifest.permission.ACCESS_FINE_LOCATION)
Weitere Dokumentation zu dieser Methode finden Sie unter dieser Link.
4
Wir müssen immer noch um Erlaubnis bitten, wenn der Benutzer sie nicht erteilt hat.
– Karan Thakkar
9. Mai ’17 um 6:30
21
Denken Sie daran, dass das Ergebnis der Berechtigungsanfrage in diesem Fall zu der Aktivität gelangt, die Ihr Fragment gestartet hat. Sehen ThetNaing Mizo‘s Antwort für eine Möglichkeit, das Ergebnis in Ihrem Fragment zu erhalten.
– lsrom
18. Apr. ’18 um 13:54
1
warum requestPermissions veraltet ist , alle aktualisierten Antworten
– Hari Shankar S
29. Mai ’21 um 4:51
Überprüfen Sie die Berechtigungen von Fragment (der Weg von 2021)
Der registerForActivityResult() Methode in fragment ist jetzt veraltet. Die Einstellungsmeldung schlägt vor, zu verwenden registerForActivityResult. Nach einigen Versuchen und Irrtümern ist hier der Weg für 2021:
Angenommen, der Name Ihres Fragments lautet AwesomeFragment. Dann im Konstruktor (vor dem Fragment onCreate um genau zu sein), initialisieren Sie ActivityResultLauncher<String[]> activityResultLauncher.
So handhaben Sie Berechtigungen in a Fragment Anruf requestPermissions Methode. Wenn Sie überschreiben onRequestPermissionsResult -Methode in Fragment und Aktivität, die dieses Fragment enthält, rufen Sie super.onRequestPermissionsResult(...) in der Aktivitätsmethode, um den Aufruf an die onRequestPermissionsResult Methode im Fragment.
Erik
Mit Kotlin rufen Sie an requestPermissions(arrayOf(Manifest.permission.THE_PERMISSION_CODE_YOU_WANT), PERMISSION_REQUEST_CODE) und fügen Sie Ihrem Fragment die folgende Überschreibung hinzu
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out kotlin.String>, grantResults: IntArray): Unit {
}
Ryan
onRequestPermissionsResult wird in der Aktivität aufgerufen, nicht im Fragment. Überschreiben versuchen onRequestPermissionsResult stattdessen in der Aktivität.
Dies ist zwar wahr, es fehlt jedoch eine Erklärung dafür, warum dies wahr ist und wie man es beheben kann – wie man es bekommt onRequestPermissionResult im Fragment. Sowohl die Erklärung als auch die Art und Weise, wie das Ergebnis in fragmentiert empfangen wird, wird in der Antwort erklärt von ThetNaing Mizo.
– lsrom
18. Apr. ’18 um 13:33
Danke, ich habe mich gefragt, warum mein Code in Fragment nicht funktioniert
– Azizjon Kholmatov
1. Okt ’19 um 16:03
.
1786000cookie-checkSo überprüfen Sie die Berechtigung im Fragmentyes
Mögliches Duplikat von Laufzeitberechtigungen von v4.Fragment anfordern und Rückruf an Fragment gehen lassen?
– R. Zagórski
23. November 16 um 9:40 Uhr