gpt4 book ai didi

java - 较新操作系统上的文件选择器 - 找不到文件

转载 作者:太空宇宙 更新时间:2023-11-04 10:05:14 24 4
gpt4 key购买 nike

在我的 Android 应用程序中,我需要使用文件选择器对话框从存储加载文本文件。前段时间,我按照这个Android file chooser topic中的说明进行操作。 (原始答案)。

在搭载 Android 4.2.2 (API 17) 的手机上一切正常。此代码(实际上作为 uri.getPath() 本身)返回文件的真实路径:

public static String getPath(Context context, Uri uri) throws URISyntaxException {
if ("content".equalsIgnoreCase(uri.getScheme())) {
String[] projection = { "_data" };
Cursor cursor = null;
try {
cursor = context.getContentResolver().query(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow("_data");
if (cursor.moveToFirst()) {
return cursor.getString(column_index);
}
} catch (Exception e) {
...
}
...
}
...
}

它返回如下内容:/storage/sdcard1/Directory/myFile.txt

..我可以进一步处理该文件。

但是,在搭载 Android 7 和 8 (API 24-26) 的手机上,cursor.getString(column_index) 始终返回 nulluri.getPath() 返回路径如下:

  • /document/254 - Android 8(外部存储)
  • /document/primary:myFile.txt - Android 8(内部存储)
  • /document/C5F9-13FC:myFile.txt - Android 7

...当我想要使用 new File(path) 创建的文件并使用 BufferedReader 读取其内容时,我收到 FileNotFoundException

我不认为这是一个权限问题,因为当我使用以下代码读取具有硬编码路径的文件时,一切正常:

File storage = Environment.getExternalStorageDirectory();
File file = new File(storage, fileName);

我的问题是:

有没有办法从文件选择器中获取真实的文件路径,或者我应该以完全不同的方式(例如使用外部库)在具有较新 Android API 的设备上解决此问题?

最佳答案

将其添加到 list 文件

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

然后在运行时请求权限,如下所示

// Check whether this app has write external storage permission or not.
int writeExternalStoragePermission = ContextCompat.checkSelfPermission(ExternalStorageActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
// If do not grant write external storage permission.
if(writeExternalStoragePermission!= PackageManager.PERMISSION_GRANTED)
{
// Request user to grant write external storage permission.
ActivityCompat.requestPermissions(ExternalStorageActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE_WRITE_EXTERNAL_STORAGE_PERMISSION);
}

您需要在与任何外部读取、写入进程交互之前执行这些代码。

关于java - 较新操作系统上的文件选择器 - 找不到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53020329/

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