ANDROID 多用户

ANDROID 多用户,第1张

从 Android L(5.0)开始引入多用户 API。直到目前,基本上都是隐藏 api 或者需要系统签名才能持有”managed_user" 权限。

Android 的这个 “用户” 并不是等同于 linux 下的用户概念。Android 是基于 Linux 的 OS,Linux 下有一套自己的账户管理体系,而 Android 对此有一些封装和改动。同时,Android 也引进了自己的多用户功能。

Linux是多用户系统,每个用户都拥有一个uid,这个uid由系统和用户名做映射绑定。同时,为了便于用户管理(譬如管理文档权限),Linux引入了群组的概念,可以将多个用户归于一个群组。每一个群组拥有一个群组id(gid)。

以第三方应用为例做说明:

一个应用被安装后, 系统给分配唯一的 "Application ID", 简称" AppId "。同时系统中会有多个用户 (User), 每个用户也有一个唯一的 ID 值, 称为" UserId " 。

Android 这里的 "UserId" 跟 Linux 的 UserId 完全不是同一个东西。UserId 10000 + appId 才等于 Linux 下的 UserId, 即进程所属用户的概念, 在 Android 我们通常记做 " uid *",以下以微信为例作为说明:

可以看到微信创建了 2 个进程,其第一列 USER 字段均为 u0_a110,这个 u0_a110 就是 uid(有人也说a110是uid)。

这个字段这样拆解成 int 值:

uid 就对应 Linux 系统里 "进程所属用户的概念"

在 Android 系统里, 我们可以很容易发现:

可以通过 adb shell dumpsys package com.android.systemui | grep "uid" 简单的得到安装应用的uid

通过源码可以看到,UserHandle包含三种概念:userid、uid、appid

userid :就是有多少个实际的用户,即手机里的主机、访客等多用户。

uid :上文讲过他跟应用进程相关,除了shareduid的应用,每个用户的每个应用的uid不一样的。

appid :跟app相关,包名相同的appid都一样,即使是不同用户。

1、钉钉的 userID 在企业创建用户时,可以自行设定,如果未指定会随机生成,因此如果未指定,还需要申请权限获取 userID。

2、钉钉的 userID 在一个企业内部是唯一的,无论创建多少个应用,均可使用同一个 userID 发送消息。因此在上传信息时,绑定标识 bind_id 为 all。

3、极光提供了一个程序可协助开发者根据手机号码获取 userID,下载 pushtools 工具( Linux 版本或 Mac 版本),在控制台输入如下命令,填写上具体的 AppKey 、 AppSecret 和手机号码即可

这里的"?"是参数占位符,

表示在执行查询时用传入的参数替换该内容

在你的例子中,

pstmt.setstring(1,userid)

//

将应用得到的参数userid传给第一个参数,

pstmt.setstring(2,password)

//

将应用得到的参数password传给第二个参数


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8131883.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存