什么是android:sharedUserLabel和它增加了什么附加值的android:sharedUserID?

文档( http://developer.android.com/guide/topics/manifest/manifest-element.html#uid )只声明我不能使用原始string和它添加的API级别,但不能解释为什么我想要使​​用它。 如果我已经将android:sharedUserID设置为“com.foo.bar”,我应该在android:sharedUserLabel引用的string中放置什么值,最重要的是为什么!

谢谢

Solutions Collecting From Web of "什么是android:sharedUserLabel和它增加了什么附加值的android:sharedUserID?"

据我所知,从AOSP实际上你可以使用这个标签只是为了给用户显示一个漂亮的名字(如果你有多个进程在同一个用户ID)。 例如,以下是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) { } } 

基本上,它做了以下的事情。 起初,它试图获得有关整个过程的信息。 如果没有find,它会尝试使用应用程序的UID作为参数获取信息(这是我在这里给出的代码的一部分)。 如果只有一个包含该UID的包,则从该包获取有关该过程的信息。 但是,如果有几个包(使用shareUserId),那么它迭代并试图find官方(漂亮)的名字。

作为我的话确认,我在MediaProvider中find了以下string:

 <!-- Label to show to user for all apps using this UID. --> <string name="uid_label">Media</string> 

因此,所有使用android:sharedUserId="android.media"进程都将具有名称Media

我不认为这个function会被普通的开发者使用,对他们很有用。