从Manifest以编程方式加载活动和/或应用程序徽标

Jak*_*ton 14 android android-manifest

我正在尝试从清单中的定义加载与当前活动和/或其父应用程序关联的徽标.此技术已成功加载与两者相关联的标题和图标,但徽标始终返回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">
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

有谁知道如何正确加载这些目标中的一个或两个的徽标?

编辑:徽标支持需要API级别9.我正在测试的设备是所有运行API级别10的模拟器和物理设备.此代码永远不会在3.0+上执行.

Joe*_*Joe 3

根据我的测试,您的代码可以在 Honeycomb 设备上正常运行,但不能在 Gingerbread 或以下设备上运行。这似乎意味着该android:logo功能虽然存在于 API 级别 8 中,但在底层平台中并未正确实现。也就是说,相同的应用程序 apk 在 8-10 级设备上不保留徽标属性,但在 11 级设备上保留。这意味着问题不在于代码或 AndroidManifest.xml,而在于平台。

  • 仅供参考,如果您使用拉解析器直接跟踪清单,则可以完成此操作。https://github.com/JakeWharton/ActionBarSherlock/blob/c1c187739a1b69340c325577f2f02c8a60dcd717/library/src/com/actionbarsherlock/internal/widget/ActionBarView.java#L267-348 (2认同)