Приложение Android падает на 6.0 при поиске разрешений с помощью ActivityCompat.requestPermissions

android android-6.0-marshmallow android-permissions

1556 просмотра

1 ответ

15278 Репутация автора

Я следую за MainActivity, который ищет разрешения для 6.0 Phone & Storage. Он запрашивает разрешение 2 раза, а затем вылетает. Нужно ли перезапускать MainActivity после получения приобретенного разрешения? спасибо за любую помощь или указатели.

MainActivity.java

onCreate(){
seek_permissions()
//load db data and continue
//with the app tasks
}


public void seek_permissions(){
            boolean hasWritePermission = (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
            if (!hasWritePermission) {
                ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_PHONE_STATE,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.MOUNT_FORMAT_FILESYSTEMS,Manifest.permission.RECEIVE_BOOT_COMPLETED,Manifest.permission.MODIFY_PHONE_STATE}, REQUEST_PERM);
            }        
    }
     @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case REQUEST_PERM:
            {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                acquired_perm = 1;
                }
                else {Toast.makeText(MainActivity.this, "Please consider granting these permissions", Toast.LENGTH_LONG).show(); }
            }
            return;
        } 
    }
Автор: webminal.org Источник Размещён: 18.07.2016 07:32

Ответы (1)


5 плюса

421 Репутация автора

Для меня это было вызвано использованием android:noHistory="true"в моем манифесте для этой деятельности?

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

Если noHistoryустановлено, ActivityCompat.requestPermissionsвызов вызывает выполнение onDestroyвызывающей операции, уничтожая ее. Так как он не сохраняется в истории из-за того, что noHistoryон больше не существует, и приложение по существу закрывается, когда диалог разрешения закрыт.

В качестве обходного пути, а не "noHistory"в манифесте, вы можете позвонить finish()в onStop()другое подходящее место при переходе от действия и удалить тег из манифеста.

Автор: droppin_science Размещён: 06.06.2017 02:04
Вопросы из категории :
32x32