Android Studio - Java: ACTION_OPEN_DOCUMENT导致无效的Uri



我想打开一个。csv文件,将数据导入到手机上的本地数据库。我也想让用户选择。csv文件使用ACTION_OPEN_DOCUMENT的意图,但是,当我看到结果的Uri,并尝试uri.getPath(),它返回/document/85

我期待更像/downloads/file.csv的东西,但它甚至不包含文件名。

我只在运行android 11的手机上测试了这个,所以它可能是一个权限问题,但我已经授予WRITE_EXTERNAL_STORAGE

在我检查权限之后,它只执行3步:

public void Import(){
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("text/csv");
startActivityForResult(intent, OPEN_BACKUP);
}

然后处理结果:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == OPEN_BACKUP && resultCode == Activity.RESULT_OK) {
Uri uri = null;
if (data != null) {
uri = data.getData();
ImportCSV(this, uri);
}
}
}

然后调用这个函数:

private void ImportCSV(Context ctx, Uri uri){
try {
CSVReader csvReader = new CSVReader(new FileReader(uri.getPath()));
} catch (FileNotFoundException e) {
Log.d("Bruh", uri.getPath());     //Always logs '/document/85'
e.printStackTrace();
}
}

我几乎可以肯定问题出在第二步,但我不知道是什么问题。任何帮助都很感激,谢谢!

(只要问你是否需要更多的信息)

对于FileReader,您可以使用Uri中的FileDescriptor。https://developer.android.com/training/secure-file-sharing/request-file

FileReader(contentResolver.openFileDescriptor(uri, "r").fileDescriptor)

最新更新