首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从报表中以编程方式加载活动和/或应用程序标识

从报表中以编程方式加载活动和/或应用程序标识
EN

Stack Overflow用户
提问于 2011-05-24 03:53:13
回答 4查看 6.5K关注 0票数 14

我试图从清单中的定义中加载与当前活动和/或其父应用程序关联的徽标。这种技术已经成功地加载了与两者相关联的标题和图标,但是徽标总是返回null或0。

下面是我正在处理的清单中的相关信息:

代码语言:javascript
复制
<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是上面定义的活动的一个实例,我尝试了以下方法(结果用内联注释):

代码语言:javascript
复制
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;

有人知道如何正确加载这两个目标的标志吗?

编辑:徽标支持需要all 9。我正在测试的设备是模拟器和物理设备,它们都运行all 10。这段代码永远不会在3.0+上执行。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-03 19:08:18

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

票数 3
EN

Stack Overflow用户

发布于 2011-05-31 17:23:53

如果您查看android.app.ContextImpl.ApplicationPackageManager (这里)中的代码,您会发现它最终使用了以下方法

代码语言:javascript
复制
public Drawable getDrawable(String packageName,int resid,ApplicationInfo appInfo)

(2.3中第2131至2173行)。

这里有几个Log.w调用,您可以使用这些调用来跟踪亚行正在发生的事情(即Failure retrieving resources for.)

票数 1
EN

Stack Overflow用户

发布于 2011-06-03 09:02:06

首先,您需要找到所有已安装的应用程序。为此,我们从包管理器中获得以下方法,

代码语言:javascript
复制
public abstract List<PackageInfo> getInstalledPackages (int flags)

这里有更多的信息

您还可以使用以下方法获取已安装软件包的信息。

代码语言:javascript
复制
public abstract List<ApplicationInfo> getInstalledApplications (int flags)

这里有更多的信息

现在,在获得列表之后,使用以下方法迭代它。

代码语言:javascript
复制
public Drawable getDrawable(String packageName,int resid,ApplicationInfo appInfo)

这里有更多的信息

每次迭代都会给出所查询的包的各自可绘制性。在这里,res id是图标的id。

代码语言:javascript
复制
R.drawable.icon
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6105504

复制
相关文章

相似问题

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