Get other applications icon uri?

2019-05-04 17:39发布

问题:

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.