据我从 AOSP 了解到,实际上你可以使用这个标签来向用户显示一个漂亮的名称(如果你在同一个 uid 中有多个进程)。例如,以下是 RunningState.java 文件中的部分代码:
// If we couldn't get information about the overall
// process, try to find something about the uid.
String[] pkgs = pm.getPackagesForUid(mUid);
// If there is one package with this uid, that is what we want.
if (pkgs.length == 1) {
try {
ApplicationInfo ai = pm.getApplicationInfo(pkgs[0], 0);
mDisplayLabel = ai.loadLabel(pm);
mLabel = mDisplayLabel.toString();
mPackageInfo = ai;
return;
} catch (PackageManager.NameNotFoundException e) {
}
}
// If there are multiple, see if one gives us the official name
// for this uid.
for (String name : pkgs) {
try {
PackageInfo pi = pm.getPackageInfo(name, 0);
if (pi.sharedUserLabel != 0) {
CharSequence nm = pm.getText(name,
pi.sharedUserLabel, pi.applicationInfo);
if (nm != null) {
mDisplayLabel = nm;
mLabel = nm.toString();
mPackageInfo = pi.applicationInfo;
return;
}
}
} catch (PackageManager.NameNotFoundException e) {
}
}
基本上,它执行以下操作。首先,它尝试获取有关整个过程的信息。如果没有找到,它会尝试使用应用程序的 UID 作为参数来获取信息(这是我在此处给出的代码的一部分)。如果只有一个包具有此 UID,则从该包中获取有关进程的信息。但是,如果有多个包(使用 shareUserId),那么它会迭代并尝试找到官方(漂亮的)名称。
为了证实我的话,我在 MediaProvider 中发现了以下字符串:
<!-- Label to show to user for all apps using this UID. -->
<string name="uid_label">Media</string>
因此,所有使用的过程android:sharedUserId="android.media"
会有名字Media
.
我不认为这个功能会被普通开发者大量使用并且对他们有用。