Как обработать READ_EXTERNAL_STORAGE отказано в разрешении - PullRequest
0 голосов
/ 18 марта 2019
My app is not responding if I click on deny read_external_storage dialog pop-up.

Вот мой код:

public Boolean isStoragePermissionGranted() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (checkSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED) {
            Log.v(TAG,"Permission is granted");
            return true;
        } else {

            Log.v(TAG,"Permission is revoked");
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
            return false;
        }
    }
    else { //permission is automatically granted on sdk<23 upon installation
        Log.v(TAG,"Permission is granted");
        return true;
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if(grantResults[0]== PackageManager.PERMISSION_GRANTED){
        Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]);
        //resume tasks needing this permission
    return;
    }

}

// Вот основное занятие

public void onCreate (Bundle icicle){
    super.onCreate(icicle);

    isStoragePermissionGranted();


Boolean isAnswered = true;

        while(isAnswered){

            if (ActivityCompat.checkSelfPermission(getApplication(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ) {
                Log.d("isanswered", String.valueOf(isAnswered));
              //  finishAffinity();

            }
            else{
                isAnswered = false;
                Log.d("isanswered", String.valueOf(isAnswered));
            }
        }


        if( checkSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED ){
            finishAffinity();

}

если я не использую цикл while, то происходит сбой приложения. Я хочу выйти из приложения, если разрешение отклонено. Как правильно обрабатывать разрешение, в котором отказано? Есть ли способ проверить разрешение внутри основной деятельности?

...