就 Android 上的路径而言,多用户功能如何工作?

2024-03-18

背景

从 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/).

每个用户都有自己的应用程序,并且他们的私人数据仅对该用户可见。

问题

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

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

  1. 私人内部存储。
  2. 模拟外部存储(内置外部存储)
  3. “真正的”外部存储(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(使用前将#替换为@)

就 Android 上的路径而言,多用户功能如何工作? 的相关文章

  • 如何使用 kotlin Android 从 Url 读取 JSON?

    我正在使用 kotlin 来开发应用程序 现在我想从服务器获取 JSON 数据 在java中 我实现了Asyntask以及Rxjava来从Url读取JSON 我也在谷歌搜索 但我无法获得满足我的要求的正确详细信息 如何使用 kotlin 从
  • Realm 中的更新语句

    I have VisitingCardPOJO表格 我想更新单个条目说在哪里no 3 VisitingCardPOJO java public class VisitingCardPOJO extends RealmObject Prima
  • 模仿 youtube/gmail 应用程序的导航抽屉

    背景 近几个月来 谷歌发布了Youtube 应用程序 http www androidpolice com 2013 08 19 breaking massive youtube for android v5 0 update brings
  • 如何解决:无法解析:com.mapbox.mapboxsdk:mapbox-android-sdk:9.5.0

    我在Android studio中尝试使用mapbox时遇到这个问题无法解析 com mapbox mapboxsdk mapbox android sdk 9 5 0 问题是什么 我的 build gradle 依赖项 dependenc
  • 通过意图使用多个电话号码添加新联系人

    我想使用添加新联系人ContactsContract Intents Insert 但问题是我不知道可以有多少个电话号码 据我了解 我只能使用三个电话号码PHONE SECONDARY PHONE TERTIARY PHONE常数 有什么办
  • 如何实现 ALTER TABLE 的示例[重复]

    这个问题在这里已经有答案了 我已经多次问过这个问题 但尚未得到完整的答案 如何实现 ALTER TABLE 语句以向数据库添加列 有人可以给我举个例子吗 请阅读SQLite ALTER TABLE 参考 http sqlite org la
  • Google 地图位于活动的中间区域

    我正在使用 Android studio 2 1 2 我检查了一下 大多数问题要么使用旧版本的 Android studio 要么使用一些旧的类 这些类不适用于我的情况 从文件 gt 新项目 gt 我使用了选项Google Maps Act
  • 如何调试“com.android.okhttp”

    在android kitkat中 URLConnection的实现已经被OkHttp取代 如何调试呢 OkHttp 位于此目录中 external okhttp android main java com squareup okhttp 当
  • 带有图层列表的自定义背景以显示对角线?

    我只想创建一个自定义背景 但我不知道如何使用 xml 而不是图像来做到这一点 这是 XML
  • TextView 宽度匹配drawableTop 宽度

    有什么办法可以使TextView width匹配复合可绘制宽度 XML 例如对于 xml 代码
  • 表面视图+gl表面视图+框架布局

    我是 java 和 OpenGL 的新手 我正在尝试获得一个相机预览屏幕 能够 同时显示 3D 对象 浏览完样本后 api 演示 我想结合示例的代码 api 演示就足够了 但不知何故它不起作用 迫使我 启动时关闭 错误被称为空指针 例外 有
  • Android Gradle 问题 - Flutter / Dart

    我的 Gradle 同步有问题 我使用 IntelliJ 和 Android Studio 构建 Flutter Dart 应用程序 我添加了 2 个新的依赖项 现在 Gradle 出现了问题 在 Android Studio 中一切正常
  • 将非 Android 项目添加到 Android 项目

    我在 Eclipse 中有三个项目 Base Server 和 AndroidClient Base和Server是Java 1 7项目 而AndroidClient显然是一个android项目 基础项目具有在服务器和 Android 客户
  • 带有 backstack Resume 的嵌套片段

    在我的应用程序中有几个fragments in an activity我正在维护一个backStack对于这些fragment 一切都很好 但其中有一个嵌套的片段 当我把它放入backStack然后再次按后退按钮恢复 该片段看起来与先前的内
  • 将人类日期(当地时间 GMT)转​​换为日期

    我正在服务器上工作 服务器正在向我发送 GMT 本地日期的日期 例如Fri Jun 22 09 29 29 NPT 2018在字符串格式上 我将其转换为日期 如下所示 SimpleDateFormat simpleDateFormat ne
  • Android:如何创建模态进度“轮”叠加层?

    我想在我的视图上显示模式进度 轮子 叠加层 ProgressDialog 很接近 但我不想要对话框背景或边框 我尝试设置对话框窗口的背景可绘制 this progressDialog new ProgressDialog Main this
  • 为什么 Google 建议将库复制到您的树中?

    谷歌的Play 服务 API 的使用说明 http developer android com google play services setup html 例如 说 将 extras google google play service
  • 找不到数据库路径是不可能的

    我对 android 开发很陌生 现在我正在尝试通过扩展 SQLiteOpenHelper 的类创建数据库 我确信数据存储在我的 Nexus 7 我用来测试应用程序的设备 上的某个位置 但是我找不到数据库的路径 我四处寻找其他类似的问题 所
  • Android TextureView 和硬件加速

    我正在尝试实现上所示的示例这一页 http developer android com reference android view TextureView html 我已经在运行 android 4 及以上版本的三种不同设备上进行了尝试
  • React Native HTTPS Api 调用在 IOS 中有效,但在 Android 中无效

    所以基本上我所做的就是简单地对启用了 HTTPS 的 UAT 服务器进行简单的 Axios 调用 我已经在 IOS 中测试了整个应用程序 API 调用工作正常 但一旦我在 Android 中测试了相同的应用程序 在真正的 Android 设

随机推荐

  • 具有作用域变量的全局 Makefile

    我正在尝试根据需要将整个项目转换为单个 Makefile 如果this http aegis sourceforge net auug97 pdf每当我遇到递归 makefile 问题时 我都会看到我的所有搜索结果都乱七八糟 然而 我遇到了
  • Capistrano 3 等效复制策略

    我更新到了 Cap 3 看来set deploy via copy不再支持 在里面发布公告 http www capistranorb com 2013 06 01 release announcement html有一个指向视频的链接 用
  • R 中 ntile 和 cut 以及 then quantile() 函数之间的区别

    我发现了关于这个主题的两个线程 用于计算 R 中的十分位数 但是 这两种方法 即dplyr ntile and quantile 产生不同的输出 实际上 dplyr ntile 无法输出正确的十分位数 方法 1 使用 ntile From
  • [[17.0.0,17.0.0]] 上的各个其他库正在请求 com.google.firebase:firebase-iid 库,但解析为 16.2.0

    我今天开始收到此错误 昨天一切正常 gradle 或 firebase 版本没有变化 com google firebase firebase iid 正在请求库 17 0 0 17 0 0 处的各种其他库 但解析为 16 2 0 禁用插件
  • 在运行 .NET 4 的 IIS 7 上找不到默认角色提供程序

    大家早上好 我正在尝试在我的 Web 应用程序中实现自定义成员身份和角色提供程序 这些应用程序是在 IIS 7 实例的默认网站下实现的 我的 Web 应用程序在 NET 4 应用程序池下运行 但是 设置相应的web config后 出现以下
  • 使用 C# 组合两个相对路径

    将相对路径附加到绝对路径 有很多欺骗 但我需要添加相对路径 e g Path1 Parent Child a txt Path2 Sibling file cs Result Parent Sibling file cs Tried Dir
  • Java:计算二项式系数

    我有以下程序计算两个整数的二项式系数 但我想更改程序 它只计算并保存解决方案所需的系数 问题是我现在真的不知道该怎么做 The Code https i stack imgur com 6TUDE jpg public static lon
  • jdk10中外部jar包放在哪里

    我一直在 JDK8 中将外部 jar 放入 jre lib ext 中 但是 当我将jdk更新到jdk10时 我在jdk目录中找不到jre子目录 所以我从Oracle下载了jre10 结果发现ext目录丢失了 我应该把这些外部jar放在哪里
  • C++ 和 C 中的命名空间

    并不是说我会ever在我的专业工作中编写如下代码 以下代码在c 和c中是合法的并且编译时没有警告 include
  • UITextField 仅在顶部或底部具有圆角半径

    我有一个UITextField已添加到视图中 我正在尝试更改它的默认外观 我想要的是改变圆角半径 但仅限于顶部 底部 我这样做是这样做的 UIBezierPath usernameMaskPathWithRadiusTop UIBezier
  • 在 LISP 中使用“ash”执行二分查找?

    所以 我现在正在阅读 Land of Lisp 事实证明 Lisp 与我见过的其他编程语言有很大不同 无论如何 本书提供了一些我们要输入到 CLISP REPL 中的代码 defparameter small 1 defparameter
  • 如何解决心跳时间超过“00:00:01”失败的问题?

    我有一个执行 HTTP POST 的 NetCore C 项目 该项目是在 Kubernetes 中设置的 我注意到以下日志 Heartbeat took longer than 00 00 01 at 02 22 2020 15 43 4
  • 无法运行我的程序

    尝试制作我的第一个程序 基本智力游戏 每次我尝试运行它时都没有显示任何内容 并且不知道出了什么问题 希望您能给我一些帮助或建议 顺便说一句 我在 Java 编程方面几乎是菜鸟 所以请轻松地评论 这是代码 import java util i
  • MySQL 索引 - 根据此表和查询,最佳实践是什么

    我有这张表 500 000 行 CREATE TABLE IF NOT EXISTS listings id int 10 unsigned NOT NULL AUTO INCREMENT type tinyint 1 NOT NULL D
  • 使用 MySQL C++ 连接器解决未定义的引用

    我正在尝试编译它 也在 mysql c 连接器文档中列出 http pastebin com HLv4zR0r http pastebin com HLv4zR0r 但我收到这些错误 http pastebin com 3t0UbeFy h
  • Keras 对隐藏层定义的澄清

    我正在遵循有关在 Keras 中构建简单深度神经网络的教程 提供的代码是 create model model Sequential model add Dense 12 input dim 8 activation relu model
  • “安全”DLL 注入

    抱歉 这不是一个很好的问题 我有一个程序 当从资源管理器打开文件时需要发出警报 即调用 ShellExecute A W 不幸的是 微软删除了允许您在 Vista 及更高版本中挂钩这些事件的 COM 接口 IShellExecuteHook
  • 将 numpy 数组保存为具有自定义颜色的单通道 png

    我有一个整数 numpy 数组 表示具有很少值 大约 2 5 的图像 我想将其保存为 png 文件 并为每个值提供自定义颜色 我正在尝试这样 import numpy as np from PIL import Image array np
  • 设置 body onload 而不使用 标签

    我正在尝试在身体加载后触发一个功能 我知道你可以从 body 标签中执行此操作 但如果可能的话 我更愿意从 JS 中执行此操作 例如 document getElementsByTagName body onload someFunc 这对
  • 就 Android 上的路径而言,多用户功能如何工作?

    背景 从 4 2 版本开始 Android 支持多用户 链接here http developer android com about versions android 4 2 html MultipleUsers and here htt