问题
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.
回答1:
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.
回答2:
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);
}
回答3:
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.
来源:https://stackoverflow.com/questions/7118260/get-other-applications-icon-uri