Android Universal Image Loader从另一个应用程序的资源中获取位图

时间:2015-01-18 12:40:04

标签: android bitmap universal-image-loader

我知道可以使用以下blockquote或类似的方式使用其他应用程序的位图:

  

String packageName =" com.some.package";

     

资源res = getPackageManager()。getResourcesForApplication(packageName);

     

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

     

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

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

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

来显示它

1 个答案:

答案 0 :(得分:0)

感谢@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中实现了这个类
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可用于从第三方应用加载位图。