はじめに
AndroidのApp Widgetインターフェースはとても強力です。これによって、開発者は、ホーム画面や同様のホスト機能を備えたアプリケーションでホスト可能な、単純なコントロールを作成できます。以前の記事「Androidのホーム画面用App Widgetを作成する(原文)」では、基本的なApp Widgetの作成と設定を行う方法を説明しました。このApp Widgetは、ユーザーがあらかじめ設定した時間間隔でスライドショーを表示するものでした。では、ユーザーがこの時間間隔を変更したい場合や、スライドショーを停止したり、次の画像へすぐにスキップしたりしたい場合があるとしたら、どうすればよいでしょうか。この記事では、このようなアクションを処理するユーザーコントロールをApp Widgetに追加する方法について説明します。
App Widgetでユーザー操作を処理するには、以下のタスクを実行する必要があります。
- App Widgetの各コントロールに固有のクリックハンドラを設定する
- 登録した受信先へクリックハンドラからコマンドを送信する
- 受信したコマンドを処理し、必要なアクションを実行する
- 変更を反映してApp Widgetを更新する
この例では、前回の記事で作成したApp Widget(図1の上部のApp Widget)に手を加えて、コントロールが3つあるボタンバーを追加します(図1の下部の2つのApp Widget)。ボタンバーのボタンはそれぞれ固有のアクションを実行し、App Widget内の他の場所をクリックするとボタンバーは非表示になります。左端のボタン(ツールセット)をクリックすると、設定Activityが起動し、これによってユーザーはスライドショーの画像切り替えの時間間隔を変更できます。中央のボタンはスライドショーを停止または再開します。右端のボタンを使うと、ユーザーは次の画像へすぐにスキップできます。
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でラップされています。