SHOEISHA iD

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

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

japan.internet.com翻訳記事

Androidのホーム画面用App Widgetを作成する

従来のモバイルアプリの枠を超えるAndroidアプリ機能を実現

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

ダウンロード サンプルコード (99.0 KB)

 Android携帯に搭載されるApp WidgetのAPIが、開発者向けに公開されました。この記事では、Androidのプラットフォーム上で基本的なApp Widgetを作成する方法について解説していきます。

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

はじめに

 Androidユーザーが初めて体験したApp Widgetは、最初のAndroid携帯に搭載されていた時計や写真フレームなどの基本的なホーム画面コントロールであり、App Widgetは早い段階から利用されていました。しかし、App WidgetのAPIが開発者向けに公開されたのはつい最近のことです。このインターフェースは、従来の携帯電話アプリケーションの枠を超えるようなAndroidアプリケーションの機能を実現するための2つの新しい興味深い方法を開発者にもたらします。開発者はAndroid 1.5でリリースされたApp Widget APIを使用して、簡単なコントロールを作成し、これらのコントロールを表示して使用するための新しいApp Widgetホストを作成できます。

 この記事では、AlarmManagerインターフェースを使用して、ユーザーが設定した時間間隔で更新されるホーム画面用App Widgetを作成する方法について解説します。特に、一連の画像からランダムに選ばれた画像を表示するApp Widgetの作成方法について解説します。表示される画像はユーザーが設定した時間間隔で定期的に変化します。

 簡単なApp Widgetを作成するための手順は次のとおりです。

  1. App Widgetのユーザーインターフェースを提供するRemoteViewを作成します。
  2. AppWidgetProviderインターフェースを実装するActivityにRemoteViewを結合します。
  3. 主要なApp Widgetの設定情報をAndroidのマニフェストファイルに定義します。

App Widgetのプロジェクトの準備

 App Widgetは、基本的には特定のアクションを処理する単純なBroadcastReceiverです。AppWidgetProviderインターフェースは、このようなアクションの処理を単純化する目的で、次のメソッドを実装するためのフレームワークを提供します。

  • onEnabled():最初にApp Widgetが作成されるときに呼び出されます。グローバルな初期設定が必要な場合はここで行ってください。
  • onDisabled()onEnabled()メソッドの逆で、この定義で処理される最新のApp Widgetが削除されるときに呼び出されます。グローバルな後処理が必要な場合はここで行ってください。
  • onUpdate():App WidgetがViewを更新する必要があるときに呼び出されます。ユーザーが最初にウィジェットを作成するときに行われることがあります。
  • onDeleted():App Widgetの特定のインスタンスが削除されたときに呼び出されます。インスタンスの後処理はここで行ってください。
  • onReceive():このメソッドの既定の実装では、BroadcastReceiverのアクションを処理し、上記のメソッドを適切に呼び出します。

 また、App Widgetフレームワークを使用するにおいて、確認済みの欠陥が存在しているため、開発者は特定の問題について明示的に対処する必要があります。詳細については以下の注意を参照ください。

※注意

 App Widgetフレームワークの最新の欠陥に関する詳細情報は、このリンクを参照ください。リンク先のページには、上記の問題(この記事のダウンロード可能なコードでも発生)や、実際に存在しないのにApp Widget IDがonUpdate()メソッドに渡されるという事例に対処するためのコードが解説されています。

 AndroidシステムでApp Widgetを使用するには、標準の<receiver>タグをAndroidのマニフェストファイルに記述します。該当する部分の記述例を次に示します。

<receiver android:name="ImagesWidgetProvider">
   <intent-filter>
   <action
   android:name="android.appwidget.action.APPWIDGET_UPDATE" />
   </intent-filter>
   <meta-data
   android:name="android.appwidget.provider"
   android:resource="@xml/imageswidget_info" />
</receiver>

 通常の<receiver>の定義と異なり、<meta-data>セクションでXMLファイルリソースを参照していることに気付くでしょう。このファイルでは、App Widgetに関する追加データを定義しており、このデータはAppWidgetProviderInfoクラスに対応しています。ここに定義される情報はイミュータブル(immutable)のため、今回のサンプルではupdatePeriodMillisの値を指定しません。というのは、このアプリケーションでは更新間隔をユーザーが変更できるようにしますが、ここでupdatePeriodMillisに値を割り当ててしまうと、この機能を実現できなくなるからです。次のコードはimageswidget_info.xmlファイルの完全な内容を表しています。

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider 
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:minWidth="146dp"
   android:minHeight="146dp"
   android:initialLayout="@layout/widget"
   android:configure=
      "com.mamlambo.imageswidget.ImagesWidgetConfiguration" />

 <appwidget-provider>タグでは、App Widgetのサイズ、使用するデフォルトレイアウト、App Widgetのインスタンス作成時に起動する設定Activityを定義します。ウィジェットをホーム画面にうまく表示させるには、サイズに関する所定のガイドラインを遵守する必要があります。ホーム画面は決まった大きさのセルに分割されています。Googleが参考として提供している基本的な公式では、占有したいセルの数に74を掛けて2を引きます。今回作成するApp Widgetはセル2つ分の高さとセル2つ分の幅を持つ正方形にするので、高さまたは幅のサイズは((74*2)-2)、つまり146となります。

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

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

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

メールバックナンバー

次のページ
onUpdate()の実装

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

  • このエントリーをはてなブックマークに追加
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と共同執筆...

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

Lauren Darcey(Lauren Darcey)

 ソフトウェア制作の分野で約20年の経験を持ち、商用モバイルアプリケーションの開発を専門とする開発者。先日、Androidプログラミングに関する詳しい解説書『Android Wireless Application Development』を、同じく開発者であるShane Conderと共同執筆し、...

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング