2

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

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

或者

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

PackageInfopkgInfo的实例在哪里

除了几个应用程序没有显示它们的图标并且日志中没有打印错误之外,一切都运行良好。根据此处的答案,我们还可以使用 URI 来获取可绘制对象。

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

提前致谢。

4

2 回答 2

2

如果您不知道资源名称,您还可以通过资源 id 访问资源:

android.resource://[package]/[res_id]

应用程序图标的资源 id 在应用程序中可用ApplicationInfo

ApplicationInfo appInfo = pm.getApplicationInfo(packageName, 0);
if(appInfo.icon != 0) {
    Uri uri = Uri.parse("android.resource://" + packageName + "/" + appInfo.icon);
}
于 2014-02-20T13:10:48.363 回答
0

看起来问题出在转换DrawableBitmap. 需要进行转换,因为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);
于 2012-06-26T06:30:22.160 回答