正在 Android Lollipop 上将文件保存到 SD 卡
Saving files to SD card on Android Lollipop
Android 5 引入新的 API 用于使用 SD 卡。如果你想将文件写入 SC 卡上的某个目录,你需要访问它。
据我所知,可以这样做:
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 42);
然后:
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
if (resultCode == RESULT_OK) {
Uri treeUri = resultData.getData();
getActivity().getContentResolver().takePersistableUriPermission(treeUri,
Intent.FLAG_GRANT_READ_URI_PERMISSION |
Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}
}
此代码启动文件夹选择器,当文件夹被选择时,它需要通过 Uri 获得文件夹权限。
但是是否可以通过路径获取对确切目录的权限?不使用文件夹选择器。我的意思是我知道我想要访问的目录,我不想启动文件夹选择器,因为它会让用户感到困惑。
如何在没有用户交互的情况下打开 DocumentFile
?
这是不可能的。用户应使用 android 的文件选择器选择目录。访问文件夹的唯一方法是使用:
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 42);
因为文件是由 Storage Access Framework DocumentsProvider 提供的。实际上它可以 return 来自第 3 方应用程序的一些 Uri,这不是真实文件,而是一些实体,第 3 方应用程序将其作为文件呈现。
Android 5 引入新的 API 用于使用 SD 卡。如果你想将文件写入 SC 卡上的某个目录,你需要访问它。 据我所知,可以这样做:
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 42);
然后:
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
if (resultCode == RESULT_OK) {
Uri treeUri = resultData.getData();
getActivity().getContentResolver().takePersistableUriPermission(treeUri,
Intent.FLAG_GRANT_READ_URI_PERMISSION |
Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}
}
此代码启动文件夹选择器,当文件夹被选择时,它需要通过 Uri 获得文件夹权限。
但是是否可以通过路径获取对确切目录的权限?不使用文件夹选择器。我的意思是我知道我想要访问的目录,我不想启动文件夹选择器,因为它会让用户感到困惑。
如何在没有用户交互的情况下打开 DocumentFile
?
这是不可能的。用户应使用 android 的文件选择器选择目录。访问文件夹的唯一方法是使用:
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 42);
因为文件是由 Storage Access Framework DocumentsProvider 提供的。实际上它可以 return 来自第 3 方应用程序的一些 Uri,这不是真实文件,而是一些实体,第 3 方应用程序将其作为文件呈现。