我试图从清单中的定义中加载与当前活动和/或其父应用程序关联的徽标。这种技术已经成功地加载了与两者相关联的标题和图标,但是徽标总是返回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;有人知道如何正确加载这两个目标的标志吗?
编辑:徽标支持需要all 9。我正在测试的设备是模拟器和物理设备,它们都运行all 10。这段代码永远不会在3.0+上执行。
发布于 2011-06-03 19:08:18
从我的测试中,您的代码可以在蜂窝设备上正常运行,但在姜饼或更低的设备上不能正常运行。这似乎意味着,android:logo功能虽然存在于API级别8中,但在底层平台中并没有正确实现。也就是说,级别8-10设备上相同的应用程序apk没有保留徽标属性,但是级别11设备保留。这意味着问题不在于代码或AndroidManifest.xml,而在于平台。
发布于 2011-05-31 17:23:53
如果您查看android.app.ContextImpl.ApplicationPackageManager (这里)中的代码,您会发现它最终使用了以下方法
public Drawable getDrawable(String packageName,int resid,ApplicationInfo appInfo)(2.3中第2131至2173行)。
这里有几个Log.w调用,您可以使用这些调用来跟踪亚行正在发生的事情(即Failure retrieving resources for.)
发布于 2011-06-03 09:02:06
首先,您需要找到所有已安装的应用程序。为此,我们从包管理器中获得以下方法,
public abstract List<PackageInfo> getInstalledPackages (int flags)这里有更多的信息
您还可以使用以下方法获取已安装软件包的信息。
public abstract List<ApplicationInfo> getInstalledApplications (int flags)这里有更多的信息
现在,在获得列表之后,使用以下方法迭代它。
public Drawable getDrawable(String packageName,int resid,ApplicationInfo appInfo)这里有更多的信息
每次迭代都会给出所查询的包的各自可绘制性。在这里,res id是图标的id。
R.drawable.iconhttps://stackoverflow.com/questions/6105504
复制相似问题