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();
是否可以将 res
和 resId
传递给 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 方应用程序加载位图。
我知道可以使用以下块引号或类似语句来使用其他应用程序的位图:
String packageName = "com.some.package";
Resources res = getPackageManager().getResourcesForApplication(packageName);
int resId = res.getIdentifier("some_bitmap_icon", "drawable", packageName);
((BitmapDrawable) res.getDrawable(resId)).getBitmap();
是否可以将 res
和 resId
传递给 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 方应用程序加载位图。