2016-07-29 8 views
0

В настоящее время я пытаюсь добавить поддержку Android N в свое приложение. Я использую новый Scoped Directory Access API прочитать каталог хранения моего приложения на внешнем накопителе, например, так:API-интерфейс с ограниченным доступом к каталогам NullPointerException

public void requestExternalStoragePermissions(int requestCode) { 
    StorageManager sm = (StorageManager)getContext().getSystemService(Context.STORAGE_SERVICE); 
    StorageVolume volume = sm.getPrimaryStorageVolume(); 
    Intent intent = volume.createAccessIntent("MyApp"); 
    startActivityForResult(intent, requestCode); 
} 

Однако я получаю NullPointerException на startActivityForResult:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.content.Intent.migrateExtraStreamToClipData()' on a null object reference 
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1635) 
    at android.app.Activity.startActivityForResult(Activity.java:4858) 
    at android.app.Activity.startActivityFromFragment(Activity.java:4844) 
    at android.app.Activity$HostCallbacks.onStartActivityFromFragment(Activity.java:7125) 
    at android.app.Fragment.startActivityForResult(Fragment.java:1150) 
    at android.app.Fragment.startActivityForResult(Fragment.java:1139) 
    .... 

Что я делаю неправильно?

Эти файлы должны быть легко доступны пользователю в файловом менеджере, поэтому getExternalFilesDir() is NOT вариант.

ответ

1

Оказалось, что новый API с ограниченным доступом к каталогам поддерживает только стандартные медиа-каталоги (Documents, Music, Pictures и т. Д.).

От API reference for StorageVolume.createAccessIntent(String directoryName):

directoryName: должен быть один из DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_RINGTONES, DIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS, DIRECTORY_PICTURES, DIRECTORY_MOVIES, DIRECTORY_DOWNLOADS, DIRECTORY_DCIM или DIRECTORY_DOCUMENTS или null запросить доступ ко всему объему.