背景
从 4.2 版本开始,Android 支持多用户(链接here http://developer.android.com/about/versions/android-4.2.html#MultipleUsers and here http://www.android.com/versions/jelly-bean-4-2/).
每个用户都有自己的应用程序,并且他们的私人数据仅对该用户可见。
问题
每个用户的数据封装在路径和访问文件方面如何工作?
我的意思是,每个用户的路径是什么:
- 私人内部存储。
- 模拟外部存储(内置外部存储)
- “真正的”外部存储(SD 卡)
?
我猜用户可以看到存储在属于其他用户的SD卡上的数据,但是模拟的外部存储呢?他们还可以写入其他用户的文件或只是读取它们吗?
每个用户都会自动获得自己的特殊路径吗?或者开发商应该处理这个问题吗?
如果开发者需要处理的话,用户的ID应该用什么?
文档说:
无论您使用哪一个 API 来保存给定用户的数据,
以其他用户身份运行时将无法访问数据。
但这都是假设您将 API 用于您自己的路径。应用程序可以通过其他路径绕过这个问题吗?
应用程序可以查询同一设备上每次安装的什么内容?他们可以获得其他用户的应用程序的大小吗?他们甚至可以获得其他用户的应用程序列表吗?
同一应用程序的多次安装是否也会占用多个大小?
每个用户的路径是什么
如果你在乎,那你就做错了。使用 Android SDK API 确定基本目录,并从那里开始工作。因此,例如:
-
getFilesDir()
将为当前用户返回正确的内部存储位置
-
getExternalFilesDir()
以及方法Environment
将为当前用户返回正确的外部存储位置
我猜用户可以看到存储在属于其他用户的SD卡上的数据
That is 超出 Android SDK 的范围 http://commonsware.com/blog/2014/04/09/storage-situation-removable-storage.html, 一般来说。
但是模拟的外部存储又如何呢?
每个用户都有自己的空间。
他们还可以写入其他用户的文件或只是读取它们吗?
除非设备中存在错误,否则都不会。
每个用户都会自动获得自己的特殊路径吗?
是的,如果您使用 Android SDK API 来确定基本目录。
应用程序可以通过其他路径绕过这个问题吗?
不可以,因为除非出现错误,否则它们既没有读取也没有写入访问权限。
应用程序可以查询同一设备上每次安装的什么内容?
AFAIK,没什么。从应用程序的角度来看,在一台设备上安装多个应用程序与在多台设备上安装应用程序没有区别。
他们可以获得其他用户的应用程序的大小吗?
抱歉,我不知道您所说的“应用程序大小”是什么意思。
他们甚至可以获得其他用户的应用程序列表吗?
这是个好问题。我没有尝试过PackageManager
查看它在次要用户运行的应用程序使用时公开的内容。理论上,它应该只报告当前用户可用的内容,特别是考虑到 Android 的受限配置文件。
同一应用程序的多次安装是否也会占用多个大小?
据我了解,APK 及其解包的各个部分(例如 DEX 文件)是共享的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)