1

我目前正在尝试将 Android N 支持添加到我的应用程序中。我正在使用新的Scoped Directory Access API来读取我的应用在外部存储上的存储目录,如下所示:

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()不是一个选项。

4

1 回答 1

1

原来新的 Scoped Directory Access API 仅支持标准媒体目录(DocumentsMusicPictures等)。

API 参考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请求访问整个卷的其中之一。

于 2016-07-29T05:32:09.797 回答