我有一个appwidget,我想在其上显示其他已安装的应用程序的启动器图标。我可以使用以下两个代码之一获取图标
pkgInfo.applicationInfo.loadIcon(context.getPackageManager());
OR
context.getPackageManager().getApplicationIcon(pkgInfo.packageName);
其中pkgInfo
是PackageInfo
一切正常,除了几个应用程序,它们没有显示它们的图标,并且日志中没有打印错误。根据答案here,我们也可以使用URI来获取drawable。
我的问题是如果android.resource://[package]/[res type]/[res name]
是URI,那么如何获取[res name]
?以及如何从此URI中获取其他应用程序图标的可绘制内容?
提前致谢。
答案 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);