【发布时间】:2017-10-31 19:56:25
【问题描述】:
如何列出 Android 设备上的所有用户?
我尝试了两种方法:
1。 UserManager.getUsers()
在android source 中,UserManager 类中似乎有一个getUsers() 方法可以满足我的需要。但是android reference没有提到方法,Android Studio也无法解析方法。
此外,来源显示getUsers()返回UserInfo类型(import android.content.pm.UserInfo;),但它也不在文档或Android Studio中。
2。 UserManager.getUserProfiles()
此方法记录在android reference。
创建一些虚拟用户:
adb shell pm create-user dummy1
adb shell pm create-user dummy2
致电getUserCount() 确认现在有 3 个用户。但是,getUserProfiles() 仍然只返回列表中的一项!
这可能是因为个人资料与用户不同。所以我尝试了一些 create-user 的变体,以下看起来很有希望:
adb shell pm remove-user dummy1
adb shell pm remove-user dummy2
adb shell pm create-user --profileOf 0 --managed profile1
adb shell pm create-user --profileOf 0 --managed profile2
请注意,无法创建 profile2 (Error: couldn't create user.)
这一次,调用getUserCount() 确认现在有 2 个用户。此外,getUserProfiles() 确认列表中有 2 个项目。不幸的是,似乎只能创建一个这种类型的用户,这对我来说没有用,因为我需要几个额外的用户。
所以这仍然不能回答我原来的问题。
解决方案:反射
getUsers() 是隐藏的,所以使用反射来访问它:
Method method = um.getClass().getMethod("getUsers", null);
Object users = method.invoke(um, null);
警告:由于它是隐藏的,因此无法保证 API 将来不会更改。
【问题讨论】:
标签: android