情報畑でつかまえてロゴ
本サイトは NTTテクノロスが旬の IT をキーワードに
IT 部門が今知っておきたい最新テクノロジーに関する情報をお届けするサイトです

テクノロジーコラム モバイル

AndroidのDaydream機能を用いたアプリケーション開発

Android搭載スマートフォンが数多くリリースされると同時に、アプリケーションも急速に増えていますが、搭載しているAndroidのバージョンに より利用できる機能が大きく異なります。本コラムでは、Android4.2から利用できるようになったDaydreamに焦点を当て、同機能を用いたア プリケーション開発で押さえるべきポイントを紹介します。

【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(カラー)

< 図1. Daydreamアプリケーション例1(カラー) >

続いて、Daydreamを使った例をもう1つ紹介します。セカイフォンというアプリケーションです。このアプリケーションはDaydreamの起動条件を満たすと自動的に起動し、その後は通常のアプリケーションと同じように操作できます。このように、画面を触っても終了しないDaydreamアプリケーションを実現することもできます。Daydreamを使えば、通常のスクリーンセーバーとは違った使い方をユーザに提供することも可能です。

図2. Daydreamアプリケーション例2(セカイフォン)

< 図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に対応させるには、いくつかの作業が必要です。その内容を簡単に紹介しておきます。

(a) 画面を格納する入れ物の準備

一般的なAndroidアプリケーションの場合は、画面をXMLファイルで定義した後、Activityに同XMLファイルを関連付けるといったことを行います(ActivityクラスのsetContentView()メソッド)。それに対し、Daydreamアプリケーションの場合、そのXMLファイルをDreamServiceというクラスに関連付ける必要があります。

(b) Daydreamに対応していることの宣言

続いて、作成したアプリケーションがDaydreamに対応していることをOSに認識させる必要があります。この手続きを行うことで、スマートフォン内のスクリーンセーバー設定 (*2) 内に、自分が作成したアプリケーションを表示させることができます。そのための宣言をAndroidManifestファイルで行う必要があります。



【用語解説】

*1: Daydreamアプリケーションの画面
画面の作り方については、別コラム 「Android向けアプリケーションのユーザインタフェース」 でも紹介していますので、併せてご参照ください。

*2: スマートフォン内のスクリーンセーバー設定
Android端末(Android 4.2の場合)の「設定」→「ディスプレイ」→「スクリーンセーバー」に、Daydream対応アプリケーション一覧がリストアップされます。ご利用の端末によっては、スクリーンセーバー一覧を表示する手順が上記と異なる場合がありますので、ご注意ください。

実践!Daydreamアプリケーションの開発

2. 実践!Daydreamアプリケーションの開発

ここまででDaydreamの概要を紹介しました。ここからは、以下に示すようなDaydream対応のオリジナル時計アプリケーションを作っていきます。画面スリープの条件を満たすと、自動的に起動し、現在の時刻を表示します。また、画面をタッチすると、自動的に終了するといった機能を持たせます。

図2.1 作成する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対応アプリケーション開発の一助になれば幸いです。

■関連コンテンツ

連載シリーズ
テクノロジーコラム
著者プロフィール
神原 健一
神原 健一