【发布时间】:2011-05-24 03:53:13
【问题描述】:
我正在尝试从清单中的定义加载与当前活动和/或其父应用程序关联的徽标。此技术已成功加载与两者关联的标题和图标,但徽标始终返回 null 或 0。
这是我正在使用的清单中的相关信息:
<application
android:icon="@drawable/ic_launcher"
android:logo="@drawable/ad_logo"
android:label="@string/app_name"
android:hardwareAccelerated="true">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:logo="@drawable/ad_logo">
activity 是上述活动的一个实例,我尝试了以下方法(结果内联注释):
PackageManager pm = activity.getPackageManager();
ComponentName cn = activity.getComponentName();
ApplicationInfo ai = activity.getApplicationInfo();
//ACTIVITY LABEL: Works
pm.getActivityInfo(cn, PackageManager.GET_ACTIVITIES).loadLabel(pm);
//APPLICATION LABEL: Works
ai.loadLabel(pm);
//APPLICATION LABEL: Works
pm.getApplicationLabel(ai);
//ACTIVITY ICON: Works
pm.getActivityInfo(cn, PackageManager.GET_ACTIVITIES).loadIcon(pm);
//ACTIVITTY ICON: Works
pm.getActivityIcon(cn);
//APPLICATION ICON: Works
pm.getApplicationIcon(ai);
//APPLICATION ICON: Works
ai.loadIcon(pm);
//ACTIVITY LOGO: Does not work
pm.getActivityInfo(cn, PackageManager.GET_ACTIVITIES).loadLogo(pm);
//ACTIVITY LOGO: Does not work
pm.getActivityInfo(cn, PackageManager.GET_ACTIVITIES).logo
//ACTIVITY LOGO: Does not work
pm.getActivityLogo(cn);
//APPLICATION LOGO: Does not work
pm.getApplicationLogo(ai);
//APPLICATION LOGO: Does not work
pm.getApplicationLogo(activity.getApplication().getPackageName());
//APPLICATION LOGO: Does not work
ai.loadLogo(pm);
//APPLICATION LOGO: Does not work
pm.getApplicationInfo(ai.packageName, 0).loadLogo(pm);
//APPLICATION LOGO: Does not work
ai.logo;
有谁知道如何为这些目标中的一个或两个正确加载徽标?
编辑: 徽标支持需要 API 级别 9。我正在测试的设备是模拟器和物理设备,它们都运行 API 级别 10。此代码永远不会在 3.0+ 上执行。
【问题讨论】:
-
我现在无法测试它,但也许在活动中有一个
android:logo也是一个问题?它是一个应用程序属性,而不是一个活动属性。尝试删除第二个。 -
@Aleadam 我注意到它没有在the specification 中定义,但存在用于加载徽标的方法,并且已在Google's own examples 中使用。我会测试。
-
方法是fin,我说的是manifest。我将在下面发布更多内容(由于评论限制)
-
顺便说一句,我很确定您的意思是“此代码将始终在 3.0+ 上执行。”
-
Android 3.0+ 上的原生操作栏将自动处理加载和显示徽标本身。此代码仅适用于 API 级别 9 和 10。