首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么是android:sharedUserLabel,它在android:sharedUserID之上增加了什么附加值?

什么是android:sharedUserLabel,它在android:sharedUserID之上增加了什么附加值?
EN

Stack Overflow用户
提问于 2012-03-25 06:55:44
回答 1查看 2.7K关注 0票数 12

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

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-25 17:30:35

根据我对AOSP的理解,实际上您可以使用这个标签向用户显示一个漂亮的名称(如果您在同一个uid中有多个进程)。例如,以下是RunningState.java文件中的一部分代码:

代码语言:javascript
复制
    // 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中找到了以下字符串:

代码语言:javascript
复制
<!-- Label to show to user for all apps using this UID. -->
<string name="uid_label">Media</string>

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

我不认为这个功能会被普通开发人员大量使用,并对他们有用。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9856388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档