【发布时间】:2020-07-19 22:03:19
【问题描述】:
我正在尝试使用 ACTION_CREATE_DOCUMENT 意图创建一个专门为 .csv 文件类型的文件。这是我目前拥有的代码:
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TITLE, ".csv");
startActivityForResult(intent, myRequestCode);
这是我的 onActivityResult 的代码:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent dataIntent) {
super.onActivityResult(requestCode, resultCode, dataIntent);
// TODO: make the requestCode a global variable
if (resultCode == RESULT_OK && dataIntent != null ) {
if (requestCode == 0) { // user clicked "Database CSV"
try {
if(! dataIntent.getData().getPath().endsWith(".csv")) {
}
OutputStream outputStream = getContentResolver().openOutputStream(dataIntent.getData());
myDb.export_toDatabaseCSV_withOutputStream(outputStream);
Toast.makeText(getApplicationContext(), "Successfully exported.", Toast.LENGTH_LONG).show(); // TODO: make this an actual check based on the result of myDb.export
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "File could not be created.", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
}
}
从 dataIntent.getData().getPath() = "/document/primary:Download/myFileName" 返回的 Uri 路径。我似乎找不到在 if 语句中编辑文件名的方法。
EXTRA_TITLE 具有与我想要的功能相似的功能,但并不是我所需要的。我希望用户能够在活动中指定文件名,而不必将 .csv 添加到文件名的末尾。例如,如果用户创建了一个名为“MyData”的文件,当活动结束时,我希望将该文件重命名为“MyData.csv”。
【问题讨论】:
-
尝试将
text/csv作为 MIME 类型并去掉EXTRA_TITLE。但是,一般来说,这不是您的决定——该活动如何处理扩展取决于该活动的开发者(Google 和可能的设备制造商),而不是您或我。 -
可以在onActivityResult中查看文件名。如果它没有以想要的扩展名结尾,您可以直接重命名文件。
-
@CommonsWare 我试过这个,但它似乎并没有真正做任何事情。至少,它不会添加所需的文件类型。
-
@blackapps 由于我对 Android 文件类型/URI 类型系统缺乏了解,我在获取文件时遇到了很多问题。什么是示例代码 sn-p 可以检查文件类型并在需要时更改名称?
-
显示你的 onActivityResult 并告诉 data.getData().toString() 的值。
标签: android android-studio android-intent