今月の投稿: 6月 2009


AppWidgetでのonClickの取り方

AppWidget上でのクリックイベントは、公式ドキュメントにあるようにPendingIntentを使って取得することができます。

AppWidgetProvider.onUpdateの中でビューをアップデートするときに、そのビューに対してPendingIntentを仕掛けてあげればOKです。

public class SampleWidgetProvider extends AppWidgetProvider {
  public void onUpdate(
      Context context,
      AppWidgetManager appWidgetManager,
      int[] appWidgetIds
  ){
    for(int id : appWidgetIds){
      // 起動するActivityのIntentを作成する
      Intent intent = new Intent(context, SampleWidgetActivity.class);
      PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

      // onClickリスナを設定する
      RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
      views.setOnClickPendingIntent(R.id.TextView01, pendingIntent);

      // AppWidgetを更新する
      appWidgetManager.updateAppWidget(id, views);
    }
  }
}

AppWidgetのインスタンス生成タイミング

AppWidgetではandroid:updatePeriodMillisで指定した周期でAppWidgetProvider.onUpdateが実行されますが、実行時に毎回インスタンスを作り直しているようです。
コンストラクタで画像を生成してonUpdateで表示するようにしていたら、onUpdateのたびにコンストラクタが呼ばれて悲しいことに・・・。

android:updatePeriodMillisの値を小さくするとインスタンス生成のコストが大きそうでしたので、0msecにして初回のみonUpdateが叩かれるようにし、onUpdateの中でServiceを起動、Timerを仕掛けて更新処理を行ってみたのですが・・・。
エミュレータや手持ちのADP1では問題なく動くのですが、Marketのコメントとか見るとホンモノの端末だとダメっぽいです。
Service化するまえは動いていたのにアップデートしたら動かなくなったという方もいました。
私の環境では再現できなくて原因がわからないため、Service化は断念しました。



色を変えられるようにしたTiny Clock Widgetは今週中には公開したいです。
とりあえず4色から選択できるだけですが。
自由なカラーカスタマイズは今月中には・・・。

Tiny Clock WidgetカラフルVer


android marketのコピープロテクションがオフにできない・・・

Tiny Clock Widget ver0.2をアップロードしてADP1で確認してみたら、なぜかマーケットに表示されない・・・。

よーくみるとコピープロテクションがONになってました。
間違ってクリックしてしまったみたいです。
しかも、一度ONにするとOFFに戻せないようです。

しょうがないから別アプリケーションとして登録しなおしました。
せっかくいい感じでランキングがあがってたのに・・・。


androidのWidgetを作ってみた

埃をかぶっていたADP1を起こしてWidgetを作ってみました。
1×1 cellのアナログ時計です。

Marketに登録してありますので、「Tiny Clock Widget」で検索してみてください。

tinyclock