需要android的文件保存对话框

时间:2012-08-18 19:27:42

标签: android android-intent dialog

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

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

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

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

还有其他选项要求用户选择文件的位置和名称吗?

4 个答案:

答案 0 :(得分:3)

  

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

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

  

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

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

  

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

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

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

  • 选择其他库来选择目录和/或文件

  • 创建自己的

答案 1 :(得分:2)

你可以参考这个链接,提供很好的信息 - >

http://developer.samsung.com/android/technical-docs/Implementing-a-file-selector-dialog

答案 2 :(得分: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();
            }
        }
    }
}

请评论是否有任何建议。

答案 3 :(得分:0)

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

至于保存文件,遗憾的是OI文件管理器没有为您提供“另存为”选项,但您可以轻松解决这个问题!只需让用户在您的应用中输入他们想要的文件名,然后使用PICK_DIRECTORY intent让他们告诉您放置它的位置!