【问题标题】:Environment.getExternalStoragePublicDirectory gives internal storageEnvironment.getExternalStoragePublicDirectory 提供内部存储
【发布时间】:2013-10-19 20:37:46
【问题描述】:

我正在保存这样的图片:

File dcimDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
File picsDir = new File(dcimDir, "MyPics");
picsDir.mkdirs(); //make if not exist
File newFile = new File(picsDir, "image.png"));
OutputStream os;
try {
    os = new FileOutputStream(newFile);

    target.compress(CompressFormat.PNG, 100, os);

    os.flush();
    os.close();
    b.recycle();
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

但是,当我通过 windows 查找图像时,它在内部存储器中,画廊证实了这一点:

最后一个令人困惑,它表示内部存储器,但文件路径中也有sdcard0

那么什么时候外部不等于外部?是设备设置问题,还是我错过了使用/错过理解getExternalStoragePublicDirectory

【问题讨论】:

    标签: android


    【解决方案1】:

    MTP 引擎有时会将getExternalStorageDirectory() 报告为“内部存储”,这就是当您在 Windows、Linux 等设备上将设备作为卷挂载时它以该名称显示的原因。

    外部存储一直是指用户可以通过 USB 数据线访问的存储。 “内部存储”标签可能用于外部存储是板载(“内部”)闪存一部分的设备。

    【讨论】:

    • 如果getExternalStorageDirectory 的行为如此,我应该如何获取 SD 卡的路径?
    • 谢谢,但我使用的是Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),它没有放在物理 SD 卡上。
    • @weston:根据设备制造商的说法,它不应该放在物理 SD 卡上。引用我在之前评论中链接到的文档:“使用内部存储分区作为外部存储的设备也可能提供 SD 卡插槽。在这种情况下,SD 卡不是外部存储的一部分。存储并且您的应用无法访问它(额外的存储仅用于系统扫描的用户提供的媒体)”。
    • 好的,我现在明白为什么会这样了。不能帮助我将文件放在 SD 卡上。我的用户不明白他们的内置相机应用程序如何使用 sd 卡,而我的应用程序不能。那么,您是说如果设备有内部存储,就无法写入 sd 卡?
    • @pillesoft:“我的意思是如何确保你真正将文件保存到物理 SD 卡?” -- 在 Android 4.4+ 上,除了几个特定于应用程序的位置之外,您没有文件系统访问可移动存储的权限。 “你有任何 android 提供的解决方案吗?” -- 在Android 7.0 之前,你想要的东西是不可能的,在那里你可以访问StorageVolume(经用户批准)。对于 Android 5.0-6.0,您可以使用 ACTION_OPEN_DOCUMENT_TREE 让用户授予您访问文档树的权限,但它可能不是您想要的神奇树。
    猜你喜欢
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 2018-04-09
    • 2021-10-11
    相关资源
    最近更新 更多