アーカイブ

‘AppWidget’ タグのついている投稿

[android] AppWidget onClick時にIDを渡す

2009 年 6 月 21 日 コメントはありません

前回はViewのonClickリスナにPendingIntentを仕掛けることによって、AppWidgetのクリックイベントを拾うことができました。

複数のWidgetを配置している場合には、どのWidgetがクリックされたかを判断する必要があります。
Intent.setData()を使用してActivityにAppWidgetIDを渡してあげればOKです。


public class SampleWidgetProvider extends AppWidgetProvider {
  public static final Uri CONTENT_URI = Uri.parse("content://jp.xfutures.android.sample");

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

      // AppWidget IDを設定する
      Uri uri = ContentUris.withAppendedId(CONTENT_URI, id);
      intent.setData(uri);

      // PendingIntentを取得する
      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);
    }
  }
}

受けるとる時はIntent.getData()ですね。


public class SampleWidgetActivity extends Activity {
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.onclick);

    // AppWidget IDを取得する
    Uri uri = getIntent().getData();
    int id =  (int)ContentUris.parseId(uri);

    // AppWidget IDをTextViewに設定する
    TextView view = (TextView)findViewById(R.id.TextViewID);
    view.setText(String.format("WidgetID is %d.", id));
  }
}

AndroidSample2009062101.zip

AppWidgetでのonClickの取り方

2009 年 6 月 20 日 コメントはありません

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);
    }
  }
}