2017-01-27 9 views
-2

Эй, я пытаюсь получить разрешение на доступ к хранилищу, и я замечаю, что на моем другом телефоне, у которого есть Android 5.0, разрешение запрашивает сбой приложения. что я должен сделать, чтобы спросить разрешения без сбоев приложения в этой версии Android и из какой версии Android я должен это сделать?Из чего api должен я спрашивать разрешения?

это код просят разрешения:

int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 0; 
    if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) 
     != PackageManager.PERMISSION_GRANTED) { 

    // Should we show an explanation? 
    if (shouldShowRequestPermissionRationale(
      Manifest.permission.READ_EXTERNAL_STORAGE)) { 
     // Explain to the user why we need to read the contacts 
    } 

    requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
      MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); 

    // MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE is an 
    // app-defined int constant that should be quite unique 

    return; 
} 
+0

От уровня 23+ –

+0

API для всех уровней вы должны добавить разрешение в AndroidMenifest.xml файл, но для ИЗА> = 6, вы должны добавить дополнительные разрешения в вашем коде, как вы сделали в своем коде. для binning разработки android development используйте библиотеку, такую ​​как https://github.com/googlesamples/easypermissions. Она может упростить вашу работу –

ответ

0

Динамические разрешения требуют API 23 или выше, так что вы можете обернуть свой код в условной проверки версии API будучи бегала.

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
    int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 0; 
    if(checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) 
     != PackageManager.PERMISSION_GRANTED) { 

     // Should we show an explanation? 
     if(shouldShowRequestPermissionRationale(
      Manifest.permission.READ_EXTERNAL_STORAGE)) { 
      // Explain to the user why we need to read the contacts 
     } 

     requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
       MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); 

     // MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE is an 
     // app-defined int constant that should be quite unique 

     return; 
    } 
}