2013年3月31日日曜日

ウィジェット:基本

■ウィジェットとは
ホームスクリーン上で動作する簡易機能を持ったアプリケーションです。
(例:時計アプリ)


■実装概要
Android OSから発行された「ウィジェットに関連するブロードキャストされたインテント」を
受信することでウィジェットを管理出来ます。

ウィジェットはホームスクリーンを長押しすることで追加することが出来ますが、
この時Android OSから「ウィジェットを作ります」というブロードキャストしたインテントが
発行されます。
また、ウィジェットを削除した時は「ウィジェットを削除します」というブロードキャストした
インテントが発行されます。

このような「ウィジェットに関連するブロードキャストされたインテント」を受信できる
ブロードキャストレシーバを作成することで、ウィジェットをホームスクリーンに追加したり、
ウィジェットが削除された時にメッセージを出力したりと言った事が可能になります。


■使用する主なクラス
・AppWidgetProvider
「ウィジェットに関連するブロードキャストされたインテント」を受信するクラスです。
BroadcastReceiverクラスを継承しており、受信したブロードキャストインテントの
ハンドリングを行います。


■必要なリソース
・AppWidgetProviderInfoオブジェクトを定義したXMLリソース
ウィジェットのメタデータ(ウィジェットの最小サイズ、使用するレイアウトのリソース、
更新間隔など)を定義します。

・AppWidgetProviderクラスを継承した独自クラス
ウィジェットが作成された時、更新された時、削除された時などの処理を
AppWidgetProviderクラスのメソッドをオーバーライドして記述します。

・ウィジェットのレイアウトファイル
ホームスクリーンに追加された際のウィジェットのレイアウトを定義します。


■実装の流れ
(1)AppWidgetProviderクラスを継承した独自クラスを作成する
AppWidgetProviderクラスで用意されているonUpdateメソッドやonDeletedメソッドを
実装してウィジェットの処理を記述します。

(2)表示するウィジェットのレイアウトを定義する
/res/layout/配下にホームスクリーンに追加された際のウィジェットのレイアウトを定義します。

(3)AppWidgetProviderInfoオブジェクトの定義
/res/xml/配下にウィジェットのメタデータを<appwidget-provider>エレメントを使って
定義します。

(4)マニフェストを設定する
マニフェストファイルにAppWidgetProviderクラスを継承した独自クラスを
ブロードキャストレシーバとして<receiver>エレメントを使って定義します。