如何知道设备中配置的多个用户?
How to know multiple users configured in device?
Android 4.2 及更高版本支持多个用户,如下所述 link...
http://developer.android.com/about/versions/android-4.2.html#MultipleUsers
现在,我的问题是..
是否可以通过编程方式了解设备中配置的多个用户?如果是,那么如何获取设备中配置的用户数?
是否可以获取用户列表?如果是那么怎么办?
有一个 public API 来获取用户详细信息,但它仅限于具有 "android.permission.MANAGE_USERS"
权限的应用程序。此权限的保护级别为 "signature|system"
,因此除非您的应用程序安装到系统分区,否则没有官方途径获取用户数。
我查看了源代码并提出了以下解决方案:
public int getNumUsers() {
// The user directory created by android.server.pm.UserManagerService
File userDir = new File(Environment.getDataDirectory(), "user");
// Get the number of maximum users on this device.
int id = Resources.getSystem()
.getIdentifier("config_multiuserMaximumUsers", "integer", "android");
int maxUsers;
if (id != 0) {
maxUsers = Resources.getSystem().getInteger(id);
} else {
maxUsers = 5;
}
int numUsers = 0;
for (int i = 0; i <= maxUsers * 10; i += 10) {
// If a user is created, a directory will be created under /data/user in increments
// of 10. The first user will always be 0.
if (new File(userDir, Integer.toString(i)).exists()) {
numUsers++;
}
}
return numUsers;
}
它对我所做的简短测试有效,但未在任何生产代码中使用。它需要更多测试,但应该可以工作。
如果您的应用具有系统级权限,这会容易得多:
UserManager userManager = (UserManager) getSystemService(USER_SERVICE);
int userCount = userManager.getUserCount();
Android 4.2 及更高版本支持多个用户,如下所述 link...
http://developer.android.com/about/versions/android-4.2.html#MultipleUsers
现在,我的问题是..
是否可以通过编程方式了解设备中配置的多个用户?如果是,那么如何获取设备中配置的用户数?
是否可以获取用户列表?如果是那么怎么办?
有一个 public API 来获取用户详细信息,但它仅限于具有 "android.permission.MANAGE_USERS"
权限的应用程序。此权限的保护级别为 "signature|system"
,因此除非您的应用程序安装到系统分区,否则没有官方途径获取用户数。
我查看了源代码并提出了以下解决方案:
public int getNumUsers() {
// The user directory created by android.server.pm.UserManagerService
File userDir = new File(Environment.getDataDirectory(), "user");
// Get the number of maximum users on this device.
int id = Resources.getSystem()
.getIdentifier("config_multiuserMaximumUsers", "integer", "android");
int maxUsers;
if (id != 0) {
maxUsers = Resources.getSystem().getInteger(id);
} else {
maxUsers = 5;
}
int numUsers = 0;
for (int i = 0; i <= maxUsers * 10; i += 10) {
// If a user is created, a directory will be created under /data/user in increments
// of 10. The first user will always be 0.
if (new File(userDir, Integer.toString(i)).exists()) {
numUsers++;
}
}
return numUsers;
}
它对我所做的简短测试有效,但未在任何生产代码中使用。它需要更多测试,但应该可以工作。
如果您的应用具有系统级权限,这会容易得多:
UserManager userManager = (UserManager) getSystemService(USER_SERVICE);
int userCount = userManager.getUserCount();