[Android] RemoteViews が倒せない App Widgets の限界に挑戦(後編)

| トラックバック(0) |

[Android] RemoteViews が倒せない App Widgets の限界に挑戦(前編) - adakoda」の続編。

App Widgets として動作するコンパスアプリの話の続き。

このコンパスアプリは、App Widgets として実装しているため、
アプリを明示的に起動しなくても、ホームスクリーン上で、リアルタイムにコンパスの針がグリグリ動きます。

※App Widgets の更新間隔は1 秒間に設定 

では、どうやって、App Widgets でイメージを更新しているかというと、エントリタイトルのとおり、RemoteViews クラスを使用しています。

具体的なソースコードは、以下のとおり。

@Override
public void onUpdate(
    Context context,
    AppWidgetManager appWidgetManager,
    int[] appWidgetIds) {
    ... 省略 ...
    RemoteViews remoteViews = new RemoteViews(
            context.getPackageName(),
            R.layout.appwidget);
    remoteViews.setImageViewBitmap(id.compass, bitmap);
    for (int i = 0; i < appWidgetIds.length; i++) {
        appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
    }
    ... 省略 ...
}

簡単に解説しておくと、App Widgets のリソースにアクセスするには、RemoteViews インスタンスを作成する必要があります。

ここでは、App Widgets 内のリソースに、compass という名前の ImageView を配置しており、
同ビットマップを更新するために、setImageViewBitmap() を呼び出しています。

ポイントは、AppWidgetProvider.onUpdate() で渡された AppWidgetManager を使用し、updateAppWidget() 呼び出している箇所で、
これを実行しないと、いくら RemoteViews インスタンスを操作しても、更新されない点です。

また、ここで渡している Bitmap は、コンパスの針のイメージを 360枚用意しているかというと、そうではなくて、
実行時にソースコードベースで、動的に Bitmap を作成してしています。

※このあたりも長くなってしまうので、別のエントリで紹介する予定です

 

# 余談ですが、このコンパスアプリをホームスクリーンに16個登録して放置しておいたら、15時間ほどで電池が切れました
# HT-03Aの電池の充電は、PCからUSB経由で充電して、1時間に18%回復(約5時間ちょいで100%)という感じでした

トラックバック(0)

トラックバックURL: http://mt.adakoda.com/mt-tb.cgi/249

2010年3月

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

自作フリーソフトウェア