使用uri获取其他应用程序图标

时间:2012-06-21 20:25:03

标签: android icons android-appwidget

我有一个appwidget,我想在其上显示其他已安装的应用程序的启动器图标。我可以使用以下两个代码之一获取图标

pkgInfo.applicationInfo.loadIcon(context.getPackageManager());

OR

context.getPackageManager().getApplicationIcon(pkgInfo.packageName);

其中pkgInfoPackageInfo

的实例

一切正常,除了几个应用程序,它们没有显示它们的图标,并且日志中没有打印错误。根据答案here,我们也可以使用URI来获取drawable。

我的问题是如果android.resource://[package]/[res type]/[res name]是URI,那么如何获取[res name]?以及如何从此URI中获取其他应用程序图标的可绘制内容?

提前致谢。

2 个答案:

答案 0 :(得分:2)

如果您不知道资源名称,您还可以按ID:

访问资源
android.resource://[package]/[res_id]

应用的ApplicationInfo版提供了应用图标的资源ID:

ApplicationInfo appInfo = pm.getApplicationInfo(packageName, 0);
if(appInfo.icon != 0) {
    Uri uri = Uri.parse("android.resource://" + packageName + "/" + appInfo.icon);
}

答案 1 :(得分:0)

Drawable转换为Bitmap时,问题似乎如此。由于RemoteViews没有可与setImageDrawable一起使用的方法ImageView,因此需要进行转换。进行以下更改可以解决问题。

<强>之前

Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();

<强>后

Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap); 
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);