gpt4 book ai didi

android - 如何从 OPEN_DOCUMENT Intent 获取文件系统路径?

转载 作者:行者123 更新时间:2023-11-29 17:24:00 25 4
gpt4 key购买 nike

我正在构建一个 Android 应用程序,我必须在其中从运行 Android Marshmallow (API v23) 的 Motorola G 2015 手机的 Downloads 文件夹中读取一个文件。

为了实现这一点,我想通过 OPEN_DOCUMENTGET_CONTENT Intent 选择文件,以利用用户手机上现有的文件浏览器,而不是实现我自己的.

我的 list 声明:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

我试图从这样的 Intent 中接收结果:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case action_choose_file:
Intent chooseFile;
Intent intent;
chooseFile = new Intent(Intent.ACTION_OPEN_DOCUMENT);
chooseFile.setType("application/epub+zip");
intent = Intent.createChooser(chooseFile, "Choose a file");
startActivityForResult(intent, ACTIVITY_CHOOSE_FILE);
return true;
.....
}
}

为了处理结果,我这样做:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case ACTIVITY_CHOOSE_FILE: {
if (resultCode == RESULT_OK) {
Uri uri = data.getData();
String filePath = uri.getPath();
final InputStream in = new FileInputStream(filePath);
}
break;
....
}
}

但是 new FileInputStream 失败并出现 ENOENT- file does not exist 异常,并且记录 filePath 显示它的值类似于 >/documents/2055 而不是真正的文件路径。

我怀疑我需要查询DocumentProvider之类的东西,但找不到与我类似的案例。值得一提的是,几年前我的代码曾经非常像这样工作,所以我怀疑 android 处理文件访问的方式发生了一些变化。

如何从我的 Android 手机的下载 位置访问文件?

最佳答案

How do I get a file system path from an OPEN_DOCUMENT intent?

你不知道。不需要为该 Uri 提供文件,更不用说您可以访问的文件了。

However new FileInputStream fails with a ENOENT- file does not exist exception, and logging filePath reveals that it's value is something like /documents/2055 rather than the real filepath.

使用 ContentResolveropenInputStream() 和/或 openOutputStream() 获取由该 表示的数据流乌里

How do I access a file from the Downloads location of my android phone?

要么使用an existing file-browsing library ,或编写您自己的文件浏览 UI。存储访问框架(ACTION_OPEN_DOCUMENT 和 kin)用于允许用户用户选择的存储位置选择内容,无论是在 Downloads/ 目录、Google Drive、Dropbox 或其他任何地方。

关于android - 如何从 OPEN_DOCUMENT Intent 获取文件系统路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35340990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com