多用户功能如何在Android上的路径方面工作?

时间:2014-04-21 18:00:08

标签: android android-sdcard android-external-storage multi-user

背景

从版本4.2开始,Android支持多用户(链接herehere)。

每个用户都有自己的应用,只有用户可以看到他们的私人数据。

问题

每个用户的数据封装如何在路径和访问文件方面起作用?

我的意思是,每个用户的路径是什么:

  1. 私人内部存储。
  2. 模拟外部存储(内置在外部存储中)
  3. "真实"外部存储(SD卡)
  4. 我猜用户可以看到存储在sd卡上的数据属于其他用户,但模拟外部存储怎么办?他们也可以写其他用户'文件还是只读它们?

    每个用户是否自动获得自己的特殊路径?或者开发人员应该处理这个吗?

    如果开发人员需要处理它,应该使用什么作为用户的ID?

    文档说:

      

    无论您使用哪种API来保存给定用户的数据,   以其他用户身份运行时,无法访问这些数据。

    但是,所有这些都假设您将API用于自己的路径。应用可以通过转到其他路径来绕过这个吗?

    应用程序可以在同一设备上查询自身的每个安装内容?他们可以获得其他用户的应用程序的大小吗?他们甚至可以获得其他用户的应用列表吗?

    同一个应用的多重安装是否也需要多个尺寸?

1 个答案:

答案 0 :(得分:3)

  

每个用户的路径是什么

如果你在乎,你做错了。使用Android SDK API确定基目录,并从那里开始工作。所以,例如:

  • getFilesDir()将返回当前用户的内部存储空间
  • getExternalFilesDir()并且Environment上的方法将为当前用户返回正确的外部存储位置
  

我猜用户可以看到存储在属于其他用户的SD卡上的数据

通常是outside the bounds of the Android SDK

  

但仿真外部存储怎么办?

每个用户都有自己的空间。

  

他们还能写其他用户的文件还是只读它们?

两者都没有,除非设备中存在错误。

  

每个用户是否自动获得自己的特殊路径?

是的,如果您使用Android SDK API来确定基本目录。

  

应用程序可以通过转到其他路径以某种方式绕过这个吗?

不,因为他们既没有读取也没有写入权限,禁止出现错误。

  

应用程序可以在同一设备上查询自身的每个安装?

AFAIK,什么都没有。从应用程序的角度来看,在一台设备上安装多个设备的事实与在多个设备上安装无法区分。

  

他们可以获得其他用户的应用大小吗?

我不知道“应用程序的大小”是什么意思,抱歉。

  

他们甚至可以获得其他用户的应用列表吗?

这是一个很好的问题。我没有尝试PackageManager来查看二级用户运行的应用程序使用它时所暴露的内容。从理论上讲,它应该只报告当前用户可用的内容,特别是在Android的受限配置文件中。

  

同一个应用的多重安装是否也需要多个尺寸?

根据我的理解,APK及其解包的部分(例如,DEX文件)是共享的。