本篇文章功能基于device owner权限开发,关于device owner详见android权限级别探索(三),设置 DeviceOwner及api收集

一 先放结论

删除其他用户的方法。

         DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);ComponentName mName = new ComponentName(this, TestMadmin.class);for(int i=1;i<=100;i++){try {UserHandle  userHandle = UserHandle.getUserHandleForUid(i);//需要设备管理器权限dpm.removeUser(mName ,userHandle );} catch (Exception e) {e.printStackTrace();}}

二 什么是多用户

随意找的一篇多用户功能说明
https://baijiahao.baidu.com/s?id=1631589461286423218&wfr=spider&for=pc
效果类似系统多开,两个用户之间数据分离,互不影响

三 如何删除其他用户

DevicePolicyManager 有一个方法:

public boolean removeUser(@NonNull ComponentName admin, UserHandle userHandle)

那么第一想法是遍历出所有UserHandle ,再依次删除。
实际操作中尝试使用

UserManager systemService = (UserManager) getSystemService(Context.USER_SERVICE);
List<UserHandle> userProfiles = systemService.getUserProfiles();
Log.i("test","userProfiles "+userProfiles.size());

获取到的userProfiles 的size = 0。
嗯,和想象不太一样。
然后在找的时候发现DevicePolicyManager也有一个getBindDeviceAdminTargetUsers方法,返回是一个UserHandle的List集合。

DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName mName = new ComponentName(this, TestMadmin.class);
List<UserHandle> listh = dpm.getBindDeviceAdminTargetUsers(mName );
Log.i("test","getBindDeviceAdminTargetUsers "+listh.size());

size=1,及当前主用户的UserHandle。但我的设备明明创建了多个用户。所以这种方法也抛弃。

尝试自己new一个UserHandle,通过UserHandle.getUserHandleForUid可以得到一个UserHandle ,但是我并不知道其他用户的uid。我尝试用1~10的遍历来一个个试其他账户的UID。假如我找对了其中一个uid,那么这个多用户应该是可以被删除掉的。

ComponentName mName = new ComponentName(this, TestMadmin.class);
for(int i=1;i<=10;i++){try {UserHandle  userHandle = UserHandle.getUserHandleForUid(i);dpm.removeUser(mName ,userHandle );} catch (Exception e) {e.printStackTrace();}}

我创建了3个用户,成功删除2个其他用户。!? 成功一半。
将for循环放大到100。全部删除。我的手机最大只能创建3个用户+1个访客,共4个用户,100能够完美删除,甚至2/30可能都够了。

UserHandle.getUserHandleForUid只有api24+才有,对于api23及以下的,可以将调用getUserHandleForUid里面的方法拿出来调用。

/*** Returns the user for a given uid.* @param uid A uid for an application running in a particular user.* @return A {@link UserHandle} for that user.*/
public static UserHandle getUserHandleForUid(int uid) {return of(getUserId(uid));
}
/** @hide */
@SystemApi
public static UserHandle of(@UserIdInt int userId) {return userId == USER_SYSTEM ? SYSTEM : new UserHandle(userId);
}

“of”方法是hide的,可以通过反射获取

userHandle = (UserHandle) UserHandle.class.getMethod("of",int.class).invoke(null,i);

所以,对于api23的设备,删除方法应该是这样:

ComponentName mName = new ComponentName(this, TestMadmin.class);
for(int i=1;i<=100;i++){try {userHandle = (UserHandle) UserHandle.class.getMethod("of",int.class).invoke(null,i);dpm.removeUser(mName ,userHandle );} catch (Exception e) {e.printStackTrace();}
}

关于ComponentName 和 DevicePolicyManager 的详细内容,将会在设备管理器一章中讲解。

android 手机多用户探索,如何在主用户删除其他用户相关推荐

  1. 如何从 Android 手机上的 SD 卡恢复已删除的照片

    为了扩展手机的存储空间,很多人都会在安卓手机上插入一张SD卡来存储一些大文件,比如电影.照片.视频等.虽然SD卡给我们带来了很大的方便,但我们还是避免不了数据丢失一些事故造成的.您是否正在为 SD 卡 ...

  2. Android手机和平板资源文件,如何从Android手机和平板电脑中恢复已删除的文件

    第3部分:如何从Android手机和平板电脑中恢复已删除的文件 正如我们所看到的,借助为此特定原因设计的专用工具,您仍可以从设备中恢复已删除的文件.最好的Android数据恢复软件之一dr.fone ...

  3. MySQL新建匿名用户_初始化MySQL用户(删除匿名用户)

    安装完MySQL后,系统默认会创建一个不需要密码的root用户,和一个无用户名无密码的匿名用户(Anonymous Account).进行下面的初始化操作以合理授权,增强安全. 设置root密码先以r ...

  4. mysql删除匿名,初始化MySQL用户(删除匿名用户)

    安装完MySQL后,系统默认会创建一个不需要密码的root用户,和一个无用户名无密码的匿名用户(Anonymous Account).进行下面的初始化操作以合理授权,增强安全. 设置root密码先以r ...

  5. mysql匿名用户_初始化MySQL用户(删除匿名用户)

    安装完MySQL后,系统默认会创建一个不需要密码的root用户,和一个无用户名无密码的匿名用户(Anonymous Account).进行下面的初始化操作以合理授权,增强安全. 设置root密码先以r ...

  6. [android] 手机卫士欢迎细节和主界面

    splash界面的细节 ctrl + O 搜索 在去标题的时候,对话框主题被去掉了,有点丑,现在既要有新版本的对话框又不显示标题 把清单文件中activity节点的主题去掉 进入到applicatio ...

  7. sys远程删除Oracle用户,sys用户删除其他用户私有dblink

    1.查看所有的目标dblink select owner||'.'||db_link from dba_db_links where db_link not like '%OGG%'; 2.创建job ...

  8. android手机用户,2011年Android手机用户使用行为研究报告

    一.市场概述及研究背景 谷歌Android,自获得摩托罗拉.三星.HTC.中兴.华为等诸多品牌的拥趸开始,就扮演起了智能手机市场竞争格局颠覆者的角色.经过近三年时间的发展,Gartner最新数据显示, ...

  9. android手机用户,ZDC:2011年Android手机用户使用行为研究报告

    一.市场概述及研究背景 谷歌Android,自获得摩托罗拉.三星.HTC.中兴.华为等诸多品牌的拥趸开始,就扮演起了智能手机市场竞争格局颠覆者的角色.经过近三年时间的发展,Gartner最新数据显示, ...

最新文章

  1. Oracle 12c 多租户 CDB 与 PDB之 shared undo 与 Local undo 切换
  2. 吴恩达深度学习代码_吴恩达深度学习笔记(58)-深度学习框架Tensorflow
  3. Linux下找出吃内存的方法总结
  4. python并发编程调优_Python并发编程-并发解决方案概述
  5. TrackViewState到底是干什么的
  6. java生成pdf加密_java使用iText 生成PDF全攻略(表格,加密)
  7. eclipse svn不能忽略文件及文件夹,ignore设置无效 ?
  8. 用c语言编程计算10,计算方法c语言编程.doc
  9. 设置失败重新发起_微服务架构下请求调用失败了怎么办!
  10. html正方形对话框素材,10种展示效果的弹出层对话框插件method.js
  11. python埋点测试_测试一面(宇宙条)
  12. kafka源码1-生产者
  13. 查询系统linux命令,Linux系统下基本的帮助查询命令小结
  14. pioneer软件VoLTE测试步骤,Pioneer操作说明.docx
  15. Java编译器 iOS_Java编译器
  16. 用matlab如何画中国地图,利用matlab画中国地图的几种方法
  17. linux vi 拷贝多行,vi 整行 多行 复制与粘贴
  18. 从大公司年薪30万,跳槽到小公司月薪8千,是什么体验?
  19. 通过银行卡号获取银行卡所属银行
  20. ICP备案和ICP许可证区别

热门文章

  1. 用爬虫写一个,小说下载程序
  2. pdf文件的简单介绍-提取pdf中的内容
  3. #物联网感知实验#proteus仿真入门
  4. 外卖CPS公众号如何实现站外引流?
  5. 金仓数据库KStudio使用手册(3. 数据库管理)
  6. 标准手臂围、大腿围、小腿围胸部腰围
  7. 【STM32H750】从零编写MDK的FLM烧录算法
  8. 50多个有用的Docker工具集
  9. 网络音乐收费陷迷途 服务质量成埋单难题
  10. 十大排序算法入门(JAVA版)