2

我需要 android 的文件保存对话框,以保存我的应用程序生成的 png 文件。

我试过了Intent intentFileSave = new Intent(Intent.ACTION_PICK);

但这没有用。万一我没有任何文件管理器,android是否有默认的“另存为”对话框?

我还尝试将OI 文件管理器集成到我的应用程序中。但我不知道,OI 文件管理器的许可证是否允许将其用作库。

是否有任何其他选项要求用户选择文件的位置和名称?

4

3 回答 3

3

android是否有默认的“另存为”对话框?

不,主要是因为应用程序要么将文件保存在其应用程序的内部或外部存储部分中,要么将它们保存在Environment类中指定的特定公共目录中。然后,它们用于ACTION_SEND与可以使用它们的其他服务共享文件。

但我不知道,OI 文件管理器的许可证是否允许将其用作库。

我在他们的 GitHub 存储库中没有看到任何许可证的迹象,这很不幸。

是否有任何其他选项要求用户选择文件的位置和名称?

除了根本不这样做(并保存到标准位置)之外,您还可以:

  • Intent通过特定操作(例如)链接到 OI 文件管理器等文件管理器应用程序org.openintents.action.PICK_DIRECTORY,如果没有,则提示用户安装一个

  • 寻找其他一些库来选择目录和/或文件

  • 创建你自己的

于 2012-08-18T20:01:44.333 回答
0

我也试过,

intent = new Intent(Intent.ACTION_PICK);
intent.setDataAndType(startDir, "vnd.android.cursor.dir/*");

但它向我展示了所有可能的意图,例如 FileManager、Gallery、Music、Contects 等……
我没有找到任何方式让 android 决定支持“另存为”功能的可能意图。

所以,我有以下解决方案。在这里,我只需要为支持另存为功能 的不同文件浏览器添加越来越多的尝试。

int iLoop = 0;
int iTryCount = 2;
for (iLoop = 0; iLoop < iTryCount; iLoop++)
{
    Intent intent = null;

    if (iLoop == 0)
    {
        // OI File Manager
        intent = new Intent(Intent.ACTION_PICK);
        intent.setData(startDir);
        intent.setAction("org.openintents.action.PICK_FILE");
        intent.putExtra("org.openintents.extra.TITLE", "Save As...");
    }
    else if (iLoop == 1)
    {
        // AndExplorer
        intent = new Intent(Intent.ACTION_PICK);
        intent.setDataAndType(startDir,
                "vnd.android.cursor.dir/lysesoft.andexplorer.file");
        intent.putExtra("explorer_title", "Save As...");
        intent.putExtra("browser_filter_extension_whitelist", "*.png");
        intent.putExtra("browser_line", "enabled");
        intent.putExtra("browser_line_textfield", "file1.png");
    }

    if (intent != null)
    {
        try
        {
            // Try to launch activity
            startActivityForResult(intent, REQUEST_SAVE_FILE);

            // TODO: Remove this notification on Publish
            Toast.makeText(m_baseSurfaceView.getContext(),
                    "Try : " + iLoop, Toast.LENGTH_SHORT).show();

            // If everything gone well, then break from here
            // otherwise see catch(..) block
            break;
        }
        catch (Exception e)
        {
            e.printStackTrace();

            // If all tries are done, then conclusion is that,
            // the user needs to install some file-manager application
            // to locate where to save the file
            if (iLoop == iTryCount - 1)
            {
                Toast.makeText(
                        m_baseSurfaceView.getContext(),
                        "Please Install some File Manager"
                                + " application to locate destination.",
                        Toast.LENGTH_LONG).show();
            }
        }
    }
}

如果有任何建议,请发表评论。

于 2012-08-19T09:00:40.900 回答
0

OI 文件管理器不需要许可证即可使用它,因为它是一个独立的软件。将 Open Intents 项目视为某种 API。据我所知,API 不需要许可证。

至于保存文件,不幸的是 OI 文件管理器没有为您提供“另存为”选项,但您可以轻松解决这个问题!只需让用户在您的应用程序中输入他们想要的文件名,然后使用PICK_DIRECTORY 意图让他们告诉您将文件放在哪里!

于 2012-12-13T11:04:41.813 回答