Разрешение Android N Разрешение убивает приложение

Я надеюсь, что вы можете помочь. Я не могу найти документацию по этому вопросу нигде. Я запрашиваю разрешение во время выполнения в моем приложении для Android WRITE_EXTERNAL_STORAGE.

Под Android M это работает как ожидалось. Я нажимаю "Разрешить", и все в порядке. Под Android N нажатие "Разрешить" убивает мое приложение. Он не падает, он просто останавливается.

В logcat это показывает

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 

Глядя на исходный код Android, я обнаружил "предоставление разрешений или отзыв измененных гидов" в PackageManagerService.java

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

А также

 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);
                    }
                });

Мой код приложения, который раньше работал нормально:

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

А потом

 @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 
         }

Может кто-нибудь объяснить мне, почему приложение убивается? И, возможно, как поймать его, чтобы программно перезапустить приложение?

0 ответов

Другие вопросы по тегам