Android 通用图像加载器从另一个应用程序的资源中获取位图

Android Universal Image Loader to get bitmaps from Another app's Resources

我知道可以使用以下块引号或类似语句来使用其他应用程序的位图:

String packageName = "com.some.package";

Resources res = getPackageManager().getResourcesForApplication(packageName);

int resId = res.getIdentifier("some_bitmap_icon", "drawable", packageName);

((BitmapDrawable) res.getDrawable(resId)).getBitmap();

是否可以将 resresId 传递给 Android-Universal-Image-Loader 以直接从第 3 方应用程序加载位图?

或者我必须将位图复制到 SD 卡,然后通过 "file:///mnt/sdcard/some_temp_bitmap"

显示它

感谢@CommonsWare 为我指明了正确的方向。

我首先扩展 BaseImageDownloader,然后覆盖 getStreamFromOtherSource:

public class CustomImageDownloader extends BaseImageDownloader {
    public CustomImageDownloader(Context context) {
        super(context);
    }

    @Override
    protected InputStream getStreamFromOtherSource(String imageUri, Object extra) {
        if (imageUri.startsWith("thirdparty://")) {
            try {
                String drawableString = imageUri.replace("thirdparty://", "");
                String[] location = drawableString.split("/");

                Resources res = context.getPackageManager().getResourcesForApplication(location[0]);
                return res.openRawResource(Integer.parseInt(location[1]));
            } catch (PackageManager.NameNotFoundException e) {
                return null;
            }
        } else throw new UnsupportedOperationException(imageUri);
    }
}

然后在我的 ImageLoaderConfiguration 中实现这个 class 使用:

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
    .imageDownloader(new CustomImageDownloader(context))
    .build();
ImageLoader.getInstance().init(config);

那么这只是一个启动图像加载器的例子:

ImageLoader.getInstance().displayImage("thirdparty://"+ packageName + "/" + resId, imageView, options);

现在 Android universal image loader 可用于从第 3 方应用程序加载位图。