3

Ich versuche, Runtime-Berechtigung zu implementieren, aber es gibt einige Probleme, wenn FragmentActivityonRequestPermissionResult() empfangen. Die checkPermissions()-Methode funktioniert sehr gut, aber onRequestPermissionResult() wird niemals nach Benutzer zulässig oder verweigerte Berechtigungen aufgerufen.onRequestPermissionsResult() wird nie aufgerufen in FragmentActivity

Wenn das Systemdialogfeld zum Anfordern der Berechtigung angezeigt wird, wird MyActivity.onDestroy() nie aufgerufen. Ist es für dieses Problem relevant?

Ich habe bereits versucht, this one und another one zu folgen, aber ich glaube, ich habe etwas verpasst.

Mein Gerät ist Nexus 5X (Android 6.0) und Target SDK-Version ist 23 Mindest Unterstützung SDK Version 15. Natürlich, ich schrieb Berechtigungen erforderlich, in AndroidManifest.xml und hinzugefügt v23 Support-Bibliotheken in build.gradle.

Dies ist mein Code:

public class MyActivity extends FragmentActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     checkPermissions(); 
    } 

    private void checkPermissions(){ 
     String[] dangerousPermissions = { 
       Manifest.permission.READ_PHONE_STATE, 
       Manifest.permission.GET_ACCOUNTS, 
       Manifest.permission.WRITE_EXTERNAL_STORAGE, 
       Manifest.permission.RECORD_AUDIO 
     }; 

     for(String permission : dangerousPermissions){ 
      if (!hasPermission(permission)) { 
       Log.e("permission.debug", "need to grant " + permission); 
       ActivityCompat.requestPermissions(this, dangerousPermissions, 4); 
      } 
     } 
    } 

    public boolean hasPermission(String permission){ 
     return ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED; 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 

     Log.d("permission.debug", " request code " + requestCode); 
     for (int i = 0; i < permissions.length; i++) { 
      if (grantResults[i] == 0 && Manifest.permission.READ_PHONE_STATE.equals(permissions[i])) { 
       initiate(); 
      } 
     } 
    } 
} 

Dies ist für meinen Code log:

E/permission.debug: need to grant android.permission.READ_PHONE_STATE 
E/permission.debug: need to grant android.permission.GET_ACCOUNTS 
E/permission.debug: need to grant android.permission.WRITE_EXTERNAL_STORAGE 
E/permission.debug: need to grant android.permission.RECORD_AUDIO 

Danke.

+0

Könnten Sie bitte Ihre logcat teilen? –

+0

Ich habe versucht, einige Protokolle für diesen Code zu bekommen, es gab keine Fehler oder Warnungen. Es ist komisch. –

+0

Sie finden eine Antwort auf diese [link] (https://stackoverflow.com/questions/32714787/android-m-permissions-onrequestpermissionsresult-not-being-belled) –

Antwort

1

Versuchen Sie, requestPermissions direkt aufzurufen, anstatt ActivityCompat.requestPermissions. Wie unten

if (checkNeededPermissions.size() > 0) { 
    Log.d(TAG, "Checking permissions"); 
    requestPermissions(this, dangerousPermissions, 4); 
} 

EDIT

Ich sehe nicht, wo Sie die Liste checkNeededPermissions definiert haben. Könnten Sie bitte ein Protokoll wie oben

+0

Leider ist minSdkVersion '15'. also muss ich 'ActivityCompat.requestPermissions().' ' –

+0

@EugeneKim einen Grund, warum Sie FragmentActivity verwenden? –

+0

@EugeneKim Ich habe die Antwort oben bearbeitet bitte überprüfen Sie und versuchen Sie es einmal. Und teilen Sie Ihr Logcat –

1

Ich habe gerade die solution gefunden.

Wenn Sie eine Aktivität in AndroidManifest.xml mit dem Attribut noHistory deklarieren, wird Ihre Aktivitätsaufgabe entfernt, wenn Aktivität vom Bildschirm verschwunden ist.

Um den Rückruf onRequestPermissionResult() zu erhalten, müssen Sie sicherstellen, dass die Aktivität wieder aufgenommen wird.

0

Hatte das gleiche Problem. Fest es durch MyActivity.this Aufruf statt diese bei dem Aufruf von ActivityCompat.requestPermissions

Verwandte Themen