【问题标题】:Writing files in lollipop in emulated storage?在模拟存储中的棒棒糖中写入文件?
【发布时间】:2016-02-11 15:56:14
【问题描述】:

所以我知道有 SD 卡访问 API 允许我们通过 DocumentProvider 和 DocumentFiles 写入文件。我已经让它在可移动的 SD 卡上工作。我总是对外部和内部存储感到困惑。我一直认为外部存储始终是 SD 卡,但今天我知道并非如此。

所以我有三个问题。

问题1,如何知道文件是存储在外部模拟存储还是存储卡中? 一种解决方案可能是在文件路径中搜索“sdcard0”或“emulated”的实例。 这个解决方案会一直有效吗?我的意思是在所有手机上?

问题 2 在模拟存储(不可移动外部存储)普通文件或 DocumentFile 上写入文件时使用什么?

问题 3 如果 Q2 的解决方案是 Document File 那么为什么这不起作用?

私有静态字符串[] getExtSdCardPaths() { 列表路径 = new ArrayList();

for (File file : GlobalSongList.GetInstance().getApplicationContext().getExternalFilesDirs("external")) {

    if (file != null && !file.equals(GlobalSongList.GetInstance().getApplicationContext().getExternalFilesDir("external"))) {
        int index = file.getAbsolutePath().lastIndexOf("/Android/data");
        if (index < 0) {
            Log.w("StorageAccessAPI", "Unexpected external file dir: " + file.getAbsolutePath());
        }
        else {
            String path = file.getAbsolutePath().substring(0, index);
            try {
                path = new File(path).getCanonicalPath();
            }
            catch (IOException e) {
                // Keep non-canonical path.
            }
            paths.add(path);
        }
    }
}
return paths.toArray(new String[paths.size()]);

}

【问题讨论】:

    标签: android android-5.0-lollipop


    【解决方案1】:

    所以我知道有 SD 卡访问 API 允许我们通过 DocumentProvider 和 DocumentFiles 写入文件。

    您指的是the Storage Access Framework。这允许您读取和写入 ,而不是文件,其中流由文档提供程序支持。用户选择要使用的文档提供者,这反过来又决定了流内容的存储位置。这可以是本地的(例如,external storageremovable storage)或远程的(Google Drive、Dropbox、Samba 文件服务器、Web 服务器、FTP 服务器、SFTP 服务器等)。

    如何知道文件是否存储在外部模拟存储或 sdcard 中?

    如果您使用的是存储访问框架,您不知道流的内容存储在哪里。

    在模拟存储(不可移动外部存储)普通文件或 DocumentFile 上写入文件时使用什么?

    如果您明确要使用外部存储,请使用外部存储。

    使用存储访问框架允许用户选择存储流内容的位置,可能是也可能不是外部存储。

    为什么这不起作用?

    我不知道你期望它做什么。我希望它返回一系列无用的字符串。

    【讨论】:

    • 所以这是用例,我想使用我的应用程序编辑文件的标签所以文件有路径,对吗?现在您实际上可以按照此处的说明从该文件中创建一个文档文件,请查看第二个答案。现在它不适用于我试图通过提出这些问题来解决的模拟存储
    • “如果您明确要使用外部存储,请使用外部存储”是什么意思
    • @AnkitSrivastava:“我的应用程序我想编辑文件的标签所以文件有路径,对吧?” -- 存储访问框架不处理文件。 “现在您实际上可以按照此处的说明从该文件中创建一个文档文件,请查看第二个答案”-我不希望该代码跨设备和 Android OS 版本,甚至跨用户可靠。 “如果您明确想要使用外部存储,请使用外部存储”——如果您想处理文件,请停止使用存储访问框架,简单明了。
    • 那你觉得我会在棒棒糖或上面写文件吗?
    猜你喜欢
    • 2016-09-26
    • 1970-01-01
    • 2015-02-02
    • 2015-09-22
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 2016-10-17
    相关资源
    最近更新 更多