背景
自从API 17(Jelly Bean)以来,Android用户可以有多个用户使用同一设备。一开始它只适用于平板电脑,但在Lollipop(API 21)上,它也适用于智能手机。
我正在尝试查看当前用户拥有哪些应用程序,这些应用程序在当前设备的其他用户之间共享,这样我就可以知道是否应该通知用户可以对所有用户进行卸载(关于此处)。这是因为我制作了一个可以管理和卸载应用程序的应用程序(此处)。
问题
我找不到一种很好的方法,甚至不用root。
我尝试过的
我想我已经找到了一种方法,通过使用"UserManager"one_answers"PackageManager 然而,它也存在一些问题:-函数"getUserProfiles"需要API 21及以上版本。-函数"getPackagesForUid"需要一个"int"参数,而我有一个"long"变量(来自"getSerialNumberForUser")。不确定这是否真的是正确的方式。-我在"UserManager"类上使用的大多数(或全部?)函数都需要"MANAGE_USERS"权限,但显然这是一个"签名|系统"权限,不太容易获得。 所以它不起作用,而且崩溃了。 有没有找到这些信息?哪些应用程序也是为其他用户安装的?UserManager um=(UserManager)getSystemService(Context.USER_SERVICE);
final PackageManager packageManager=getPackageManager();
Log.d("AppLog","users count:"+um.getUserCount());
for(UserHandle userHandle : um.getUserProfiles()){
final long serialNumberForUser=um.getSerialNumberForUser(userHandle);
Log.d("AppLog","serial number:"+serialNumberForUser);
final String[] packagesForUid=packageManager.getPackagesForUid((int)serialNumberForUser);
StringBuilder sb=new StringBuilder();
for(String packageName : packagesForUid){
sb.append(packageName+" ");
}
Log.d("AppLog","packages:"+sb.toString());
}
问题
如果您有root访问权限,并且Android没有再次更改目录结构,则可以枚举/data/user/
的内容。每个子目录表示一个用户,每个二级子目录表示已安装的应用程序,例如/data/user/0/com.example.maypp
或/data/user/1/com.example.someotherapp
。