【问题标题】:Using ACTION_CREATE_DOCUMENT to create a CSV file使用 ACTION_CREATE_DOCUMENT 创建 CSV 文件
【发布时间】: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


【解决方案1】:

使用它,它应该可以工作

   intent.setType("text/comma-separated-values")

如果可能的话,请与我们分享您使用过的这个功能myDb.export_toDatabaseCSV_withOutputStream(outputStream);

【讨论】:

    猜你喜欢
    • 2021-03-23
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多