如何在Android设备上列出所有用户?
我尝试了两种方法:
UserManager.getUsers()
在android source中,getUsers()
类中的UserManager
方法似乎完全符合我的要求。但是,android reference未提及该方法,Android Studio也无法解析该方法。
此外,来源显示getUsers()
返回UserInfo
类型(import android.content.pm.UserInfo;
),但它也不在文档或Android Studio中。
UserManager.getUserProfiles()
此方法记录在android reference。
中创建一些虚拟用户:
adb shell pm create-user dummy1
adb shell pm create-user dummy2
调用getUserCount()
确认现在有3个用户。但是,getUserProfiles()
仍然只返回列表中的1个项目!
这可能是因为个人资料与用户不同。所以我尝试了一些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将来不会发生变化。
答案 0 :(得分:1)
该方法隐藏了@hide
。该方法还需要系统权限android.Manifest.permission.MANAGE_USERS
。此权限无法授予第三方应用。
UserManager#getUsers()文档:
返回此设备上所有用户的信息,包括其中的信息 标记为删除。要仅检索活动的用户,请使用 getUsers(布尔值)。
需要android.Manifest.permission.MANAGE_USERS权限。
返回: 设备上存在的用户列表。
如何在Android设备上列出所有用户?
根据this回答,您可以使用getUserProfiles
。