首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >`/storage/emulated/legacy/` vs `/storage/emulated/0/` vs `data/data/myApp‘

`/storage/emulated/legacy/` vs `/storage/emulated/0/` vs `data/data/myApp‘
EN

Stack Overflow用户
提问于 2014-05-13 15:25:47
回答 1查看 56.5K关注 0票数 16

我想在我的应用程序中保存一个imageFile

我希望"Google+裁剪应用程序“使用它。

但后者打开了另一个图像。

我猜是权限问题。

在我的代码中,我保存在这里:

这是外部存储吗?返回:/storage/emulated/0/myApp/file1.tmpEnvironment.getExternalStorageDirectory().getAbsolutePath()

使用adb shell可以看到文件实际保存在以下位置:/storage/emulated/legacy/myApp/file1.tmp

为什么会有所不同?

我应该用这个地方代替吗?这是外部存储吗?

数据返回:` getAppContext().getFilesDir().getParent() /data/myApp‘

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-13 16:05:06

从历史上看,内部存储和外部存储之间的区别如下:

内部:安卓设备的内部闪存,用于为每个应用程序分配私有存储。分配的存储受到保护,以防止任何其他应用程序访问(根设备上除外)。

外部:在许多情况下,SD卡没有安全限制,即所有应用程序都可以访问“外部”存储的所有区域。

随着Android新版本的出现,新设备的内置闪存越来越多,内部和外部之间的区别正变得越来越模糊。例如,我的Nexus7没有SD卡插槽。

在设备没有真正的外部存储的情况下,Android仍然需要提供一个模拟的外部存储,以保持与旧应用程序的兼容。换句话说,RAM在物理上是内部的(不可移动的),但它的一部分是分区的,Android文件系统API将该分区视为“外部的”和完全可读的。

至于您看到的用于外部存储的路径,例如...

代码语言:javascript
运行
复制
/storage/emulated/0/myApp/file1.tmp
/storage/emulated/legacy/myApp/file1.tmp

...one或其中的其他(可能两者)是到仿真的外部目录和文件的相同部分的重定向或“虚拟”路径。

这就是为什么必须始终使用正确的API调用来访问文件和目录,而不是假定硬编码路径,因为它可能因设备而异。

如果你使用Environment.getExternalStorageDirectory(),你可以放心,任何其他做同样事情的应用程序都能够访问你在那里创建的任何文件。

如果你使用getFilesDir(),那么你访问的是内部存储的根目录,该根目录分配给你的应用程序,并且只对你的应用程序可访问(尽管,正如我所提到的,根手机可以访问私有/内部存储)。

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23625104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档