下载并在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同步地下载图片。