AndroidのDaydream機能を用いたアプリケーション開発
Android搭載スマートフォンが数多くリリースされると同時に、アプリケーションも急速に増えていますが、搭載しているAndroidのバージョンに より利用できる機能が大きく異なります。本コラムでは、Android4.2から利用できるようになったDaydreamに焦点を当て、同機能を用いたア プリケーション開発で押さえるべきポイントを紹介します。
テクノロジーコラム モバイル
- 2013年05月01日公開
【Profile】
新技術開発を好み、Androidは正式版が出る前から試用するなど、公私にわたってAndroidの世界に没頭。プライベートで開発したアプリケーションで、 Multi-Screen UX Competition 2013優秀賞を受賞し、Mobile World Congress 2013(バルセロナ)に出展。国内外のセミナー講演や書籍執筆などの活動も行っている、NTTソフトウェアきってのAndroid技術者。
はじめに
Android搭載スマートフォンが市場で数多くリリースされると同時に、Android向けのアプリケーションも急速に数が増えています。一言にAndroidと言っても、搭載しているAndroidのバージョン(2.x、3.x、4.x等)によって、利用できる機能が大きく異なります。
今回のコラムでは、Android4.2から利用できるようになったDaydreamに焦点を当て、同機能を用いたアプリケーション開発で押さえるべきポイントを紹介していきます。
Daydreamとは、簡単に言えばスクリーンセーバー型のアプリケーションです。具体的には、クレードル接続中、もしくは、充電中に、予め設定された秒数が経過した後、端末がスリープするタイミングで自動的に起動するといった特徴を持ちます。また、起動後にユーザが画面を触ると、自動的に終了させることも可能です。Daydreamアプリケーションの例(カラー)がこちらです。条件を満たしたタイミングで自動的に起動し、虹色の模様が少しずつ変化します。画面にタッチすると、自動的に終了します。
< 図1. Daydreamアプリケーション例1(カラー) >
続いて、Daydreamを使った例をもう1つ紹介します。セカイフォンというアプリケーションです。このアプリケーションはDaydreamの起動条件を満たすと自動的に起動し、その後は通常のアプリケーションと同じように操作できます。このように、画面を触っても終了しないDaydreamアプリケーションを実現することもできます。Daydreamを使えば、通常のスクリーンセーバーとは違った使い方をユーザに提供することも可能です。
< 図2. Daydreamアプリケーション例2(セカイフォン) >
では、Daydreamアプリケーションの具体的な開発の流れを見ていきましょう。
Daydreamアプリケーション開発
1. Daydreamの基礎
Daydreamアプリケーションの開発で、特に重要となる2点を挙げます。
1. 画面の作成
2. Daydream対応に必要な作業
これらについて、順番に解説をします。
1.1 画面の作成
Daydreamアプリケーションでは、ユーザに見せたい画面を最初に作る必要があります。ライブ壁紙やホームスクリーンウィジェットといったアプリケーションでは、Androidが標準提供しているGUIコンポーネントやレイアウトの利用に一部制限があるため、画面作成に苦労する場合があります。その一方、Daydreamでは、これらの標準部品をフルに利用できます。そのためDaydreamの方が、より柔軟でリッチなコンテンツを実現することが可能です。またDaydreamアプリケーションの画面 (*1) は、通常のAndroidアプリケーションと同様に、XMLファイルで定義するのが便利でしょう。
1.2 Daydream対応に必要な作業
作成した画面をDaydreamに対応させるには、いくつかの作業が必要です。その内容を簡単に紹介しておきます。
(b) Daydreamに対応していることの宣言
続いて、作成したアプリケーションがDaydreamに対応していることをOSに認識させる必要があります。この手続きを行うことで、スマートフォン内のスクリーンセーバー設定 (*2) 内に、自分が作成したアプリケーションを表示させることができます。そのための宣言をAndroidManifestファイルで行う必要があります。
【用語解説】
- *1: Daydreamアプリケーションの画面
- 画面の作り方については、別コラム 「Android向けアプリケーションのユーザインタフェース」 でも紹介していますので、併せてご参照ください。
*2: スマートフォン内のスクリーンセーバー設定- Android端末(Android 4.2の場合)の「設定」→「ディスプレイ」→「スクリーンセーバー」に、Daydream対応アプリケーション一覧がリストアップされます。ご利用の端末によっては、スクリーンセーバー一覧を表示する手順が上記と異なる場合がありますので、ご注意ください。
実践!Daydreamアプリケーションの開発
2. 実践!Daydreamアプリケーションの開発
ここまででDaydreamの概要を紹介しました。ここからは、以下に示すようなDaydream対応のオリジナル時計アプリケーションを作っていきます。画面スリープの条件を満たすと、自動的に起動し、現在の時刻を表示します。また、画面をタッチすると、自動的に終了するといった機能を持たせます。
< 図2.1 作成するDaydreamアプリケーション例(シンプル時計) >
このアプリケーションのソース構成を示します。
■ シンプル時計プロジェクトのルート
+--- AndroidManifest.xml (アプリケーション定義)...(3)
+--- src
| +--- jp.co.ntts.android.simpleclocksaver(パッケージ)
| +--- SimpleClockDream.java (Javaソース)...(2)
|
+--- res
+--- drawable-○○
| +--- *.png (画像ファイル)
+--- layout
| +--- dream.xml (レイアウトXML)...(1)
+--- values
+--- *.xml (strings,xmlなど)
< 図2.2 シンプル時計のソース構成 >
この中で特に重要な構成要素である「(1)レイアウトXML」「(2)Javaソース」「(3)アプリケーション定義」の中身を見ていきましょう。
2.2 ソースの解説
2.2-1 レイアウトXML
画面を構成するレイアウトXMLファイルを紹介します。LinearLayout(垂直方向)の中に、デジタル時計表示用コンポーネント(DigitalClock)を1つ入れています。
< 図2.3レイアウトXMLファイル (dream.xml) >
2.2-2 Javaソース
先ほど紹介したレイアウトXMLファイルを関連付けるDreamServiceの実装を紹介します。
< 図2.4 Javaソースファイル(SimpleClockDream.java) >
DreamServiceを継承したSimpleClockDreamというクラスを作成しています。DreamServiceクラスは、Daydreamのビジネスロジックの根幹をなす非常に重要なクラスです。DreamServiceはクラス名から想像がつくとおり、Serviceクラスを継承しています。
Serviceと聞くとUIと無関係のように思われるかもしれません。しかし、Daydreamの場合は、DreamServiceを使ってUI表示やイベント処理を行うことになります。また、DreamServiceには、Activityと同様にライフサイクル (*1) が存在する点にも配慮が必要です。続いて、ライフサイクルメソッド群の中で最初に呼び出されるonAttachedToWindow() (ウィンドウにアタッチされるタイミングで呼び出されるメソッド)内の実装を説明していきます。
(1) super.onAttachedToWindow()
スーパークラスのonAttachedToWindow()を呼び出しています。
(2) setInteractive(false)
引数にfalseを指定し、Daydream起動後、ユーザが画面にタッチしたらアプリケーションが自動終了するようにしています。また、trueを指定した場合は、画面を触ってもアプリケーションが終了しません。Daydream起動後、ユーザに操作させたいアプリケーションでは、trueを指定することになります。
(3) setFullscreen(true)
引数にtrueを指定し、通知バーやステータスバーを表示することなくアプリケーションの画面をフルスクリーン表示するように指定しています。Daydreamアプリケーションの場合、画面を広く使えるようにtrueを設定しておくのが良いでしょう。また、falseを指定した場合は、フルスクリーン表示になりません。
(4) setContentView(R.layout.dream)
画面を定義したレイアウトXMLファイル(dream.xml)と本クラス(SimpleClockDream.java)の関連付けを行っています。
2.2-3 アプリケーション定義
本アプリケーションの定義を行うAndroidManifest.xmlを紹介します。
< 図2.5 アプリケーション定義ファイル(AndroidManifest.xml) >
特に注意しておきたい3点を紹介します。
(1) <uses-sdk android:minsdkversion="17"></uses-sdk>
DaydreamはAndroid4.2(APIレベル17)以降でサポートされています。また、本アプリケーションはDaydream機能のみを持つため、APIレベル17以上の端末でダウンロードできるように本宣言を行っています。
(2) <service>~<service>まで</service></service>
DreamServiceを継承したSimpleClockDreamを含むことを宣言しています。
(3) <intent-filter>~<intent-filter>まで</intent-filter></intent-filter>
(2)の宣言だけでは、Daydreamアプリケーションになりません。そこで、Intent-filterを定義して、Daydream関連のIntent(android.service.dreams.DreamService)を拾えるようにしています。この記述を行うことで、スマートフォン内のスクリーンセーバー設定内に、自分で作ったDaydreamアプリケーションがリストアップされます。
【用語解説】
- *1: ライフサイクル
- DreamServiceクラスのライフサイクルの詳細については、 公式APIリファレンス を参照してください。
おわりに
以上、Daydreamの概要と、実際のアプリ開発についての紹介でした。
Daydreamが持つ自動起動するという特徴をいかせば、Androidアプリケーションの店頭デモンストレーションなどの場面でも役立つのではないかと考えています。
本コラムがDaydream対応アプリケーション開発の一助になれば幸いです。
■関連コンテンツ
新技術開発を好み、Androidは正式版が出る前から試用するなど、公私にわたってモバイルの世界に没頭。 プライベートで開発した「セカイフォン」で、 Multi-Screen UX Competition優秀賞受賞。MWC(バルセロナ)/IFA(ベルリン)/CES(ラスベガス)へのプロダクト出展、 国内外(デブサミやDroidconなど)のセミナー講演や書籍執筆(単著・共著含め5冊)などの活動も行っている。NTTテクノクロスきってのモバイル技術者。 プライベートでは旅行が好きで、現地の外国人にセカイフォンをデモすることが密かな楽しみ。
(a) 画面を格納する入れ物の準備
一般的なAndroidアプリケーションの場合は、画面をXMLファイルで定義した後、Activityに同XMLファイルを関連付けるといったことを行います(ActivityクラスのsetContentView()メソッド)。それに対し、Daydreamアプリケーションの場合、そのXMLファイルをDreamServiceというクラスに関連付ける必要があります。