SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

AndroidのApp Widgetでユーザー操作を処理する

ユーザーイベントに反応するインタラクティブ機能を備えたApp Widgetを作成

  • X ポスト
  • このエントリーをはてなブックマークに追加

 Android携帯に搭載されるApp WidgetのAPIが、開発者向けに公開されました。App Widgetは、Androidユーザーにまったく新しい体験を提供します。この記事では、前回作成した基本的なApp Widgetに、ユーザー操作処理を追加する方法を紹介します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 AndroidのApp Widgetインターフェースはとても強力です。これによって、開発者は、ホーム画面や同様のホスト機能を備えたアプリケーションでホスト可能な、単純なコントロールを作成できます。以前の記事「Androidのホーム画面用App Widgetを作成する原文)」では、基本的なApp Widgetの作成と設定を行う方法を説明しました。このApp Widgetは、ユーザーがあらかじめ設定した時間間隔でスライドショーを表示するものでした。では、ユーザーがこの時間間隔を変更したい場合や、スライドショーを停止したり、次の画像へすぐにスキップしたりしたい場合があるとしたら、どうすればよいでしょうか。この記事では、このようなアクションを処理するユーザーコントロールをApp Widgetに追加する方法について説明します。

 App Widgetでユーザー操作を処理するには、以下のタスクを実行する必要があります。

  1. App Widgetの各コントロールに固有のクリックハンドラを設定する
  2. 登録した受信先へクリックハンドラからコマンドを送信する
  3. 受信したコマンドを処理し、必要なアクションを実行する
  4. 変更を反映してApp Widgetを更新する

 この例では、前回の記事で作成したApp Widget(図1の上部のApp Widget)に手を加えて、コントロールが3つあるボタンバーを追加します(図1の下部の2つのApp Widget)。ボタンバーのボタンはそれぞれ固有のアクションを実行し、App Widget内の他の場所をクリックするとボタンバーは非表示になります。左端のボタン(ツールセット)をクリックすると、設定Activityが起動し、これによってユーザーはスライドショーの画像切り替えの時間間隔を変更できます。中央のボタンはスライドショーを停止または再開します。右端のボタンを使うと、ユーザーは次の画像へすぐにスキップできます。

図1 3種類の状態のApp Widget
図1 3種類の状態のApp Widget

RemoteViewsの処理

 App Widgetは、RemoteViewsという特殊な表示コントロールを使用します。通常のViewとは異なり、RemoteViewsコントロールは複数のViewコントロールを別プロセスで表示します。従って、ボタンハンドラを単純に追加するわけにはいきません。それでは、RemoteViewsオブジェクトを表示するプロセス(この場合はホーム画面プロセス)ではなく、アプリケーションプロセスでコードが実行されてしまいます。

 RemoteViewsコントロールでユーザー操作を処理できるようにするには、PendingIntentを登録し、RemoteViewsオブジェクト内の特定のViewがクリックされたときに、これが開始されるようにします。これは、RemoteViewsオブジェクトのsetOnClickPendingIntent()メソッドを呼び出すことで行います。例えば、スライドショーの時間間隔設定Activityを起動するPendingIntentを追加するには、次のようなコードを追加します。

  PendingIntent pendingIntent = PendingIntent.getActivity
     (context, 0, configIntent,
     PendingIntent.FLAG_UPDATE_CURRENT);
  remoteView.
     setOnClickPendingIntent(R.id.config, pendingIntent);

 続いて、次ページから、configIntentという内側のIntentを詳しく見ていきましょう。これはPendingIntentでラップされています。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
PendingIntentの処理

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Shane Conder(Shane Conder)

 モバイル技術やウェブ技術を得意とするソフトウェア開発者(現在は小さなモバイルソフトウェア会社に勤務)。先日、Androidプログラミングに関する詳しい解説書『Android Wireless Application Development』を、同じく開発者であるLauren Darceyと共同執筆...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4496 2009/11/11 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング