O ile mi zrozumieć z AOSP rzeczywiście można użyć tej etykiety tylko do wyświetlania ładną nazwę użytkownika (jeśli masz kilka procesów w tym samym uid). Na przykład tutaj jest część kodu w pliku 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) {
}
}
Zasadniczo robi następujące rzeczy. Najpierw próbuje uzyskać informacje o całym procesie. Jeśli nie znajdzie, próbuje uzyskać informacje za pomocą UID aplikacji jako parametru (jest to część kodu, który tutaj podałem). Jeśli jest tylko jeden pakiet z tym UID, informacje o procesie są pobierane z tego pakietu. Ale jeśli istnieje kilka pakietów (przy użyciu shareUserId), to iteruje i próbuje znaleźć oficjalną (śliczną) nazwę.
Jako potwierdzenie moich słów znalazłem następujący ciąg w MediaProvider:
<!-- Label to show to user for all apps using this UID. -->
<string name="uid_label">Media</string>
Zatem wszystkie zużywając android:sharedUserId="android.media"
będzie mieć nazwę Media
.
Nie sądzę, że funkcja ta będzie często używana przez zwykłych programistów i jest dla nich przydatna.