我有一个Android appwidget,可以显示其他应用程序的图标。
我使用appInfo.loadIcon获取其他应用程序图标,然后使用setImageViewBitmap将其设置为小部件。
问题是如果我的小部件上有太多图标,我会收到“FAILED BINDER TRANSACTION”错误。我知道这是从大小限制和解决方案使用图像uri而不是位图本身。
其他应用程序的图标是否有可访问的URI?
感谢。
答案 0 :(得分:12)
如果您不知道资源名称,您还可以按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 :(得分:8)
虽然@CommonWare's answer在许多情况下都很好,但我发现这通常更容易:
android.resource://[package]/[res id]
- 尤其是当您想要引用某个其他应用的启动器图标时。
答案 2 :(得分:5)
尝试android.resource://[package]/[res type]/[res name]
,您的案例中[res type]
为drawable
。包裹和名称必须来自ResolveInfo
或您获取数据的任何地方。