1

Ich hoffe, Sie können helfen. Ich kann nirgendwo eine Dokumentation finden. Ich ersuche um Laufzeitberechtigung in meiner Android App WRITE_EXTERNAL_STORAGE.Android N erlaubt Permission killt die App

Unter Android M funktioniert das wie erwartet. Ich drücke "Allow" und alles ist in Ordnung. Klicken Sie unter Android N auf "Zulassen", um meine App zu beenden. Es stürzt nicht ab, es hört einfach auf.

Im logcat zeigt es

Killing 6599:com.myname.myappname/u0a223 (adj 100): permission grant or revoke changed gids 
Force removing ActivityRecord{c834991 u0 com.myname.myappname/.MainActivity t1814}: app died, no saved state 
Destroying surface Surface(name=Window{bf01619 u0 com.myname.myappname/com.myname.myappname.MainActivity}) called by com.android.server.wm.WindowStateAnimator.destroySurface:-1 com.android.server.wm.WindowStateAnimator.destroySurfaceLocked:-1 com.android.server.wm.WindowState.removeLocked:-1 com.android.server.wm.WindowManagerService.removeWindowInnerLocked:-1 com.android.server.wm.WindowManagerService.removeWindowLocked:-1 com.android.server.wm.WindowManagerService.removeWindowLocked:-1 com.android.server.wm.AppWindowToken.removeAllWindows:-1 com.android.server.wm.AppWindowToken.removeAppFromTaskLocked:-1 

Mit Blick auf dem Android-Quellcode gefunden Erlaubnis Erteilung oder den Widerruf von geänderten gids 'in PackageManagerService.java

private static final String KILL_APP_REASON_GIDS_CHANGED = "permission grant or revoke changed gids"; 

Und

final int result = permissionsState.grantRuntimePermission(bp, userId); 
     switch (result) { 
      case PermissionsState.PERMISSION_OPERATION_FAILURE: { 
       return; 
      } 

      case PermissionsState.PERMISSION_OPERATION_SUCCESS_GIDS_CHANGED: { 
       mHandler.post(new Runnable() { 
        @Override 
        public void run() { 
         killSettingPackagesForUser(sb, userId, KILL_APP_REASON_GIDS_CHANGED); 
        } 
       }); 

Mein App-Code, der früher gut funktionierte, ist:

requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); 

Und dann

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

    if (requestCode == 1) { 

     // If request is cancelled, the result arrays are empty. 
     if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      // do stuff 
     } 

Kann jemand mir erklären, warum die App getötet wird? Und möglicherweise wie Sie es fangen, um die App programmgesteuert neu zu starten?

+0

Für welche API-Ebene prüfen Sie? Unter 'API level 23' wird keine Laufzeitberechtigung verlangt. – Piyush

+0

Meine Vermutung ist, dass dies ein Fehler in Ihrem Gerät ist. Während Ihr Prozess beendet wird, wenn der Benutzer Berechtigungen aus den Einstellungen widerruft, sollte er nicht beendet werden, wenn der Benutzer Berechtigungen erteilt, unabhängig davon, ob er in Ihrer App oder in den Einstellungen von requestPermissions() ausgelöst wurde. Sie könnten vorhandenen Code versuchen, der Laufzeitberechtigungen anfordert. Beispiel: [https://commonsware.com/Android] [mybooks] enthält keine Beispielanwendungen, die Laufzeitberechtigungen verwenden (z. B. [diese] (https://github.com/commonsguy/cw-omnibus/tree/). master/Permissions/tutorial/finish/RuntimePermTutorial)), zeigen Sie das von Ihnen beschriebene Verhalten. – CommonsWare

+0

@ Piyush Korrekt. Dies geschieht, wenn Sie nach Laufzeitberechtigung auf API-Ebene 25 fragen. –

Antwort

-1

Ich konfrontiert dieses gleiche Problem, ich entferne einfach android:noHistory="true" von Aktivitätstag in Android Manifest und jetzt funktioniert alles gut.

Verwandte Themen