下载并在RemoteViews中显示图片
在创建App Widget时,经常需要下载图片资源并显示到Widget上,下面给出几种下载并在RemoteViews中显示图片的方法。
1. 直接下载
直接下载图片会比较耗时,注意不要放在Main Thread。对于更新Widget的场景,可以在IntentService中下载并显示图片。
URL url = new URL(imageUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.connect(); InputStream in = conn.getInputStream(); Bitmap image = BitmapFactory.decodeStream(in); in.close(); remoteViews.setImageViewBitmap(R.id.image_view, image);
2. 使用Picasso库
2.1. Main Thread
目前Picasso已经加入了对RemoteViews的支持,可以在Main Thread使用如下的方法下载图像并加载到指定appWidgetId 的image_view :
Picasso.with(context) .load(url) .into(remoteViews, R.id.image_view, new int[] {appWidgetId});
2.2. Background Thread
如果不在Main Thread,可以先用Picasso同步地下载图片,再加载到指定ImageView,如:
Bitmap image = Picasso.with(context) .load(url) .get(); remoteViews.setImageViewBitmap(R.id.image_view, image);
这里的get() 会让Picasso同步地下载图片。