Ich habe ein Fragment, in dem ich die Recycling- und Einstellungsdaten in diesem Recycling-Übersichtsfenster mit dem Recycling-Übersichtsadapter habe.
Jetzt habe ich eine Schaltfläche in der Liste des Adapters, auf die geklickt wird, auf die ich die Berechtigung READ_EXTERNAL_STORAGE in Android überprüfen muss, um ein neues Berechtigungsmodell in Android zu erhalten.
Ich habe eine neue Funktion im Fragment dieses Adapters erstellt, um zu prüfen, ob die Berechtigung erteilt wurde oder nicht, und um Erlaubnis zu bitten, falls dies nicht bereits erfolgt ist.
Ich habe MyFragment.this als Parameter im Adapter übergeben und die Methode des Fragments über den Button click in adapter aufgerufen.
Ich habe den folgenden Code verwendet, um requestPermission in fragment aufzurufen.
if(ContextCompat.checkSelfPermission(mContext, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED)){
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
ConstantVariables.READ_EXTERNAL_STORAGE);
}
Ich habe die onRequestPermissionsResult
-Methode in Fragment mit dem folgenden Code überschrieben:
@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 {}
Es wird jedoch nicht aufgerufen, statt dessen wird die onRequestPermissionsResult-Methode dieser Aktivität aufgerufen.
Ich habe dieselbe onRequestPermissionsResult-Methode auch in der übergeordneten Aktivität von Fragment definiert, und es wird aufgerufen.
Ich kann die onRequestPermissionsResult-Methode der Aktivität nicht entfernen, möchte jedoch die onRequestPermissionsResult-Methode von fragment aufrufen, wenn ich die Erlaubnis von fragment ..__ beantrage. Wie kann ich das tun? Mache ich hier etwas falsch, bitte helfen Sie mir, wenn hier jemand eine Idee hat.
Bearbeitete Antwort, um umfassendere Probleme zu behandeln
Ich denke, Sie verwirren die Methode für Fragmentierung und Aktivität. Hatte im letzten Monat ein ähnliches Thema für mein Projekt. Bitte überprüfen Sie, ob Sie schließlich Folgendes haben:
super.onRequestPermissionsResult
aus der onRequestPermissionsResult
der Aktivität aufrufen.Sehen Sie, ob es hilft.
Ich habe die Standortgenehmigung von einem Fragment angefordert und in dem Fragment musste ich Folgendes ändern:
ActivityCompat.requestPermissions(getActivity(), new String[]{
Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, LOCATION_REQ_CODE);
zu diesem:
requestPermissions(new String[]{
Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, LOCATION_REQ_CODE);
dann wurde das onRequestPermissionsResult im Fragment aufgerufen.
Die Methode requestPermissions
bei Fragmenten erfordert API-Level 23 oder höher.
Wenn Ihre App auf eine niedrigere Version abzielt, können Sie verwenden
FragmentCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
ConstantVariables.READ_EXTERNAL_STORAGE);
Zuerst müssen Sie die Abhängigkeit von Support-V13 hinzufügen:
implementation "com.Android.support:support-v13:$supportLibVersion"
private void showContacts() {
if (getActivity().checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
PERMISSIONS_REQUEST_READ_STORAGE);
} else {
doShowContacts();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,
int[] grantResults) {
if (requestCode == PERMISSIONS_REQUEST_READ_STORAGE
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
doShowContacts();
}
}
erlaubnis ändern
Stellen Sie sicher, dass sowohl PERMISSION_REQUEST_CODE
inonRequestPermissionsResult
als auch in IhrerFragment
denselben Wert enthält.
Für das tragetSDK 28 funktionieren die SDK-Prüfung (> 23) und die Anforderungsermächtigungen von fragment. ActivityCompat.requestPermissions schlägt fehl (wenn Sie den Anforderungscode unter 65536 festlegen, wird das Berechtigungsdialogfeld angezeigt, und wenn der Benutzer die Berechtigung zulässt, werden die Berechtigungen bereitgestellt, es erfolgt jedoch kein Rückruf. Wenn Sie jedoch 65536 festlegen, wird ActivityCompat.requestPermissions verwendet scheitern Sie sofort. Ich weiß nicht, was hinter dieser Logik steckt.
Arbeitscode:
if (Build.VERSION.SDK_INT >= 23) {
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, LOCATION_ACCESS_REQUEST);
}