Android – onRequestPermissionsResult() ist veraltet. Gibt es Alternativen?
Lesezeit: 8 Minuten
Asche
Ich habe versucht, Anforderungsberechtigungen zum Schreiben und Lesen aus dem Speicher zu implementieren. Alles hat gut funktioniert, aber heute hat mir Android gezeigt, dass die Methode onRequestPermissionsResult(…) veraltet ist. Es gibt so viele Fragen zu diesem Thema in StackOverflow, aber leider sind sie veraltet.
Ich habe die folgenden Methoden in einem Fragment aufgerufen.
Gibt es eine Alternative für onRequestPermissionsResult(…), die ich verwenden kann?
onRequestPermissionsResult() ist nicht veraltet androidx.appcompat.app.AppCompatActivity. hast du welche Aktivitätsklasse verwendet?
– Daniel.Wang
9. März 2021 um 17:35 Uhr
Ich benutze es in einem Fragment. Die Erklärung von Android Studio lautet: „Überschreibt die veraltete Methode in ‚androidx.fragment.app.Fragment‘“
– Asche
9. März 2021 um 17:43 Uhr
Ich habe die Antwort gepostet und Ihre Frage beworben. damit Sie meine Antwort überprüfen können.
– Daniel.Wang
9. März 2021 um 18:25 Uhr
Sie sollten sich diesen offiziellen Leitfaden ansehen: youtu.be/oP-zXjkT0C0. onActivityResult() und onRequestPermissionResult() sind jetzt alle veraltet.
– Sam Chen
28. Mai 2021 um 16:59 Uhr
Die requestPermissions-Methode ist veraltet.
– Abhinav Saxena
28. Juli 2021 um 9:40 Uhr
Daniel.Wang
Das onRequestPermissionsResult() Methode ist veraltet androidx.fragment.app.Fragment.
Sie dürfen also verwenden registerForActivityResult() Methode statt onRequestPermissionsResult().
Danke, kann ich den ActivityResultLauncher(..) für mehrere Berechtigungen verwenden? Zum Beispiel requestPermissionLauncher.launch( Manifest.permission.WRITE_EXTERNAL_STORAGE); requestPermissionLauncher.launch (Manifest.permission.READ_EXTERNAL_STORAGE);
– Asche
9. März 2021 um 18:35 Uhr
ja, du kannst es verwenden. aber Sie müssen einen Teil meines Codes ändern. ich habe meinen Beitrag aktualisiert.
– Daniel.Wang
9. März 2021 um 18:43 Uhr
Sie müssen also verwenden ActivityResultContracts.RequestMultiplePermissions() beim Anruf registerForActivityResult() Methode.
Die meisten Antworten beziehen sich auf die OP-Anforderung. Aber ich habe einige Dinge gefunden, die fehlen, also dachte ich, ein vollständiges Beispiel zu geben (in Koltin).
A) Fragmente müssen registerForActivityResult() aufrufen, bevor sie erstellt werden (dh Initialisierung, onAttach() oder onCreate()). Andernfalls funktioniert es nicht und die App würde abstürzen.
Fehler:
java.lang.IllegalStateException: Fragment ProfileFragment{bf12414} (210ad5a1-3286-4586-a48f-deac1d8e3eef id=0x7f09008b) versucht, sich nach der Erstellung zu registrierenForActivityResult. Fragmente müssen registerForActivityResult() aufrufen, bevor sie erstellt werden (dh Initialisierung, onAttach() oder onCreate()).
B) Es wird empfohlen, die Erlaubnis zu beantragen, wenn sie wirklich benötigt wird. In meinem Beispiel, wenn der Benutzer auf klickt Button mit Ausweis locBtnwird der Berechtigungsdialog angezeigt, anstatt angezeigt zu werden, wenn Aktivität/Fragment erstellt wird.
Überprüfen Sie Folgendes, das in der Dokumentation zu finden ist.
// Register the permissions callback, which handles the user's response to the
// system permissions dialog. Save the return value, an instance of
// ActivityResultLauncher. You can use either a val, as shown in this snippet,
// or a lateinit var in your onAttach() or onCreate() method.
val requestPermissionLauncher =
registerForActivityResult(RequestPermission()
) { isGranted: Boolean ->
if (isGranted) {
// Permission is granted. Continue the action or workflow in your
// app.
} else {
// Explain to the user that the feature is unavailable because the
// features requires a permission that the user has denied. At the
// same time, respect the user's decision. Don't link to system
// settings in an effort to convince the user to change their
// decision.
}
}
Starten Sie danach die Anfrage
when {
ContextCompat.checkSelfPermission(
CONTEXT,
Manifest.permission.REQUESTED_PERMISSION
) == PackageManager.PERMISSION_GRANTED -> {
// You can use the API that requires the permission.
}
//Is not needed for it to work, but is a good practice as it plays a role
//in letting user know why the permission is needed.
shouldShowRequestPermissionRationale(...) -> {
// In an educational UI, explain to the user why your app requires this
// permission for a specific feature to behave as expected. In this UI,
// include a "cancel" or "no thanks" button that allows the user to
// continue using your app without granting the permission.
showInContextUI(...)
}
else -> {
// You can directly ask for the permission.
// The registered ActivityResultCallback gets the result of this request.
requestPermissionLauncher.launch(
Manifest.permission.REQUESTED_PERMISSION)
}
}
11429900cookie-checkAndroid – onRequestPermissionsResult() ist veraltet. Gibt es Alternativen?yes
onRequestPermissionsResult()
ist nicht veraltetandroidx.appcompat.app.AppCompatActivity
. hast du welche Aktivitätsklasse verwendet?– Daniel.Wang
9. März 2021 um 17:35 Uhr
Ich benutze es in einem Fragment. Die Erklärung von Android Studio lautet: „Überschreibt die veraltete Methode in ‚androidx.fragment.app.Fragment‘“
– Asche
9. März 2021 um 17:43 Uhr
Ich habe die Antwort gepostet und Ihre Frage beworben. damit Sie meine Antwort überprüfen können.
– Daniel.Wang
9. März 2021 um 18:25 Uhr
Sie sollten sich diesen offiziellen Leitfaden ansehen: youtu.be/oP-zXjkT0C0.
onActivityResult()
undonRequestPermissionResult()
sind jetzt alle veraltet.– Sam Chen
28. Mai 2021 um 16:59 Uhr
Die requestPermissions-Methode ist veraltet.
– Abhinav Saxena
28. Juli 2021 um 9:40 Uhr