インターネットからの画像で更新したい単純なAndroidウィジェットがあります。ウィジェットに静止画像を問題なく表示できます。これには非同期タスクを使用する必要があると言われましたが、これらの経験はあまりありません。
これが私のウィジェットです:
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
for (int i = 0; i < appWidgetIds.length; i++){
int appWidgetId = appWidgetIds[i];
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.activity_main);
//Setup a static image, this works fine.
views.setImageViewResource(R.id.imageView1, R.drawable.wordpress_icon);
new DownloadBitmap().execute("MyTestString");
appWidgetManager.updateAppWidget(appWidgetId, views);
}
次に、ダウンロードを行う非同期タスク クラスがあります。次のようになります。
public class DownloadBitmap extends AsyncTask<String, Void, Bitmap> {
/** The url from where to download the image. */
private String url = "http://0.tqn.com/d/webclipart/1/0/5/l/4/floral-icon-5.jpg";
@Override
protected Bitmap doInBackground(String... params) {
try {
InputStream in = new java.net.URL(url).openStream();
Bitmap bitmap = BitmapFactory.decodeStream(in);
return bitmap;
//NOTE: it is not thread-safe to set the ImageView from inside this method. It must be done in onPostExecute()
} catch (Exception e) {
Log.e("ImageDownload", "Download failed: " + e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if (isCancelled()) {
bitmap = null;
}
//Here is where I should set the image to the imageview, but how?
}
}
私のコードはインターネットから画像を正常にダウンロードしたと思います。
私が混乱しているのは、非同期タスククラスから特定のウィジェットの「ImageView」にこの画像を取得する方法です。画像を更新するには、Context、AppWidgetManager、および AppWidgetId の 3 つの異なるオブジェクトにアクセスする必要があります。
new DownloadBitmap().execute("MyTestString");
ありがとう!