【发布时间】:2020-06-17 23:22:05
【问题描述】:
我和我的第一个 Android 应用程序似乎完全迷失在 Uri、路径和 Android 文件系统结构的迷宫中。 :-
我的应用程序允许用户将数据导出到文件中。我创建了一个目录选择器,它允许用户选择一个文件夹并将字符串转换后的 uri 存储在首选项中,如下所示:
case R.id.action_directoryPicker: {
Intent i = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
i.addCategory(Intent.CATEGORY_DEFAULT);
startActivityForResult(Intent.createChooser(i, "Choose directory"), 9999);
return true;
}
....
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 9999) {
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
Uri treeUri = data.getData();
if (treeUri == null) {
return;
}
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString(SettingsActivity.KEY_PREF_IMPORT_EXPORT_LOCATION, treeUri.toString());
editor.apply();
}
}
这很好用! 现在,我想在第一次启动应用程序时将默认设置为下载文件夹,这是出现问题的时候。 我在 mainActivity.onCreate() 中有以下代码
# Now some conversion madness:
# Convert environment string into a file
# Convert file into a uri
# Convert uri into a string again so I can store it in preferences
File f = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
Uri u = Uri.fromFile(f);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString(SettingsActivity.KEY_PREF_IMPORT_EXPORT_LOCATION, u.toString());
editor.apply();
}
尽管它很丑,但它在原则上是有效的。但是,我从 Environment.DIRECTORY_DOWNLOADS 获得的字符串/uri 与通过 filePicker 例程手动选择下载文件夹时获得的不同。
应该阅读的内容:content://com.android.providers.downloads.documents/tree/downloads
我从Environment.DIRECTORY_DOWNLOADS 得到的结果失败了:file:///storage/emulated/0/Download
因此,在所有这些上下文之后,我的问题是获得反映设备下载文件夹的正确 Uri 的最佳方法是什么?
【问题讨论】:
标签: android path environment-variables uri