作用域目录访问 API 抛出 NullPointerException
Scoped directory access API throws NullPointerException
我目前正在尝试为我的应用添加 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);
}
但是,我在 startActivityForResult
上收到 NullPointerException
:
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()
不是 一个选项。
事实证明,新的范围目录访问 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
请求访问整个卷。
我目前正在尝试为我的应用添加 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);
}
但是,我在 startActivityForResult
上收到 NullPointerException
:
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()
不是 一个选项。
事实证明,新的范围目录访问 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
请求访问整个卷。