I have an Android appwidget which shows icons of other applications on it.
I get the other applications icons with appInfo.loadIcon and then I set it to the widgets with setImageViewBitmap.
The problem is that if I have too many icons on the widget, I get "FAILED BINDER TRANSACTION" error. I understand that it's from a size limit and the solution it to use the image uri instead of the bitmap itself.
Is there an accessible URI to other applications' icons?
Thanks.
Try android.resource://[package]/[res type]/[res name]
, where [res type]
in your case would be drawable
. The package and name would have to come from the ResolveInfo
or wherever you are getting your data.
In case you don't know the resource name, you can also access resources by their id:
android.resource://[package]/[res_id]
The resource id of the app icon is available in the ApplicationInfo
of the app:
ApplicationInfo appInfo = pm.getApplicationInfo(packageName, 0);
if(appInfo.icon != 0) {
Uri uri = Uri.parse("android.resource://" + packageName + "/" + appInfo.icon);
}
While @CommonWare's answer is good in many cases, I find that this is often easier:
android.resource://[package]/[res id]
- especially when you want a reference to for instance the launcher icon of some other app.