Dmi*_*ink 11 android manifest android-manifest
文档(http://developer.android.com/guide/topics/manifest/manifest-element.html#uid)仅说明我不能使用原始字符串及其添加的API级别,但不解释原因我想用它.如果我已经将android:sharedUserID设置为"com.foo.bar"我应该在android:sharedUserLabel引用的字符串中放入什么值,最重要的是为什么!?
谢谢
实际上,根据我对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) {
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,它做了以下事情.首先,它试图获取有关整个过程的信息.如果它没有找到,它会尝试使用应用程序的UID作为参数来获取信息(这是我在这里给出的代码的一部分).如果只有一个包含此UID的包,则从该包中获取有关该进程的信息.但是如果有几个包(使用shareUserId),那么它会迭代并尝试查找官方(漂亮)名称.
作为对我的话的确认,我在MediaProvider中找到了以下字符串:
<!-- Label to show to user for all apps using this UID. -->
<string name="uid_label">Media</string>
Run Code Online (Sandbox Code Playgroud)
因此,使用的所有进程都android:sharedUserId="android.media"将具有名称Media.
我不认为这个功能会被普通开发人员大量使用,对他们有用.
| 归档时间: |
|
| 查看次数: |
2368 次 |
| 最近记录: |