2016-05-30 3 views
2

У меня есть приложение, которое использует следующее разрешение:App пишет на внешний накопитель без разрешения

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Я строю приложение для Android 6.0:

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.1" 

    defaultConfig { 
     applicationId "de.my.package" 
     minSdkVersion 14 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

Когда я теперь запустить приложение и пишите во внешнее хранилище, я не получаю запрос на разрешение на Nexus 5 с Android 6.0, даже если я не установил разрешение:

enter image description here

Почему и как приложение может писать на внешнее хранилище без разрешения?

+0

Приложение не будет писать на внешнее хранилище (вам нужно проверить, что приложение ничего написали в ext.storage). Также он не попросит вас предоставить разрешение до тех пор, пока вы не запросите его самостоятельно –

+0

Да, конечно он не спросит, не заставил ли он это. Но приложение будет генерировать исключения из-за отсутствия разрешений, чего она не делает. И да. Приложение действительно пишет на внешнее хранилище. Я проверил это. – Mulgard

+0

Возможно, вы проверяете 'android.Manifest.permission.WRITE_EXTERNAL_STORAGE''в случае, если оператор вашего класса –

ответ

3

В зефира вы должны спросить разрешения во время выполнения, только если пользователь гранд разрешения вы можете сделать такие операции, как WRITE_EXTERNAL_STORAGE

Вы можете спросить разрешения, как этого

if (ContextCompat.checkSelfPermission(thisActivity, 
                Manifest.permission.WRITE_EXTERNAL_STORAGE) 
        != PackageManager.PERMISSION_GRANTED) { 

     //request for the permission 
        ActivityCompat.requestPermissions(thisActivity, 
                new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 
                MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE); 

        // MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE is an 
        // app-defined int constant. The callback method gets the 
        // result of the request. 
    
} 

Вам необходимо переопределить onRequestPermissionsResult метод для проверки разрешения ведется или нет

@Override 
     public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
         switch (requestCode) { 
             case MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: { 
                 // If request is cancelled, the result arrays are empty. 
                 if (grantResults.length > 0 
                     && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

                     // permission was granted, yay! Do the 
                     // write to external strage operations here 

                 } else { 

                     // permission denied, boo! Disable the 
                     // functionality that depends on this permission. 
         /*You can forcefully again ask for the permissions to the user here but it is a bad practice*/ 
                 } 
                 return; 
             } 

             // other 'case' lines to check for other 
             // permissions this app might request 
         } 
     } 

Я думаю, что в зефире без пользователя грандиозное разрешение вы не сможете получить разрешение.
Если вы хотите запустить приложение без запроса и разрешения на грандиозное изображение, то измените целевую версию sdk с 23 до 22 в градиенте уровня приложения, но в этом случае вы не сможете получить функции зефира.

+0

Спасибо за вашу работу, но я уже это знаю. Проблема в том, что приложение может писать на внешнее хранилище без разрешения. – Mulgard

+0

Если пользователь разрешил READ_EXTERNAL_STORAGE разрешение, он не будет запрашивать снова WRITE_EXTERNAL_STORAGE.is это тот случай? –

+0

нет, нет случай. Я знаю о группах разрешений. – Mulgard

Смежные вопросы