在UserManager类中找不到getUsers()方法

时间:2017-10-31 03:22:55

标签: android

如何在Android设备上列出所有用户?

我尝试了两种方法:

1。 UserManager.getUsers()

android source中,getUsers()类中的UserManager方法似乎完全符合我的要求。但是,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()仍然只返回列表中的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将来不会发生变化。

1 个答案:

答案 0 :(得分:1)

该方法隐藏了@hide。该方法还需要系统权限android.Manifest.permission.MANAGE_USERS。此权限无法授予第三方应用。

UserManager#getUsers()文档:

  

返回此设备上所有用户的信息,包括其中的信息   标记为删除。要仅检索活动的用户,请使用   getUsers(布尔值)。

     

需要android.Manifest.permission.MANAGE_USERS权限。

     

返回:       设备上存在的用户列表。

  

如何在Android设备上列出所有用户?

根据this回答,您可以使用getUserProfiles