2015年8月21日金曜日
2015年7月16日木曜日
※Android Auto公式サイトより引用 https://www.android.com/intl/ja_jp/auto/
このブログでも何回か触れているAndroid Autoですが、その後どうなっているのでしょうか。
現在のAndroid Autoについてまとめました。
Android Auto対応カーナビも続々発売されています。
しかし、現在利用可能な国はアメリカ、イギリス、オーストラリアだけです。
日本では、以下の日本語公式サイトが存在するものの、まだ利用できません。
https://www.android.com/intl/ja_jp/auto/
Android Autoに対応したアプリも配信されており、Google Playでもまとめられているようですが、
こちらも日本からはアクセスできません。
http://g.co/androidauto
日本でまだ利用できないのは残念ですが、
正式なサービスが始まっているため、いくつかの新情報もあります。
今回は、以下のURLで解説されているAndroid Autoの使用方法についてまとめました。
https://support.google.com/androidauto
■環境
・Android Autoの動作環境
- Android Autoに対応したAndroid端末(Lollipop)
車載カーナビとはUSBケーブルで接続します。
また、カーナビとAndroid端末間ではBluetooth通信も使用します。 - Android Auto公式アプリ(上記Android端末にインストール必須)
- Android Autoに対応した車
・Android Autoで未対応の動作
おそらく安全面の理由から、以下の動作は未対応とされています。- Android Auto対応アプリ以外の端末操作(車載カーナビとUSBケーブル接続中)
- テレビ、youtubeなどの動画再生
- 文字入力キーボードの使用
・その他
- Android Autoで使用するデータ通信は、Android端末上で発生する量と同等。
外部と通信するのはあくまでAndroid端末のみ、ということになります。 - Android Auto使用中、Android端末はUSBケーブルを通じて給電される。
極端にバッテリーを消耗するAndroid Autoアプリがない限り、バッテリーの心配はなさそうです。 - GPSが内蔵されている車であれば、Android端末は車側のGPS信号を使用できる。
仕組みは不明ですが、Android端末側のGPS精度は気にしなくて良いようです。
■画面構成
・ホーム画面
Android Auto開始後、カーナビのディスプレイにはAndroid Autoのホーム画面が表示されます。ホーム画面の構成は以下のようになっています。

※Android Auto公式サイトより引用 https://support.google.com/androidauto

※Android Auto公式サイトより引用 https://support.google.com/androidauto
- ナビゲーション通知
- リマインダー
- 音声コマンド
マイクアイコンをタッチすることで、音声入力が可能になり、以下の操作が行えます。
・音楽再生(曲名)
・地図のルート検索
・電話発信
・スケジュールの取得
・アプリ選択
ホーム画面の下部にはアプリカテゴリのアイコンがあり、選択するとAndroid端末内にインストールされているAndroid Auto対応アプリのリストが表示されます。
※Android Auto公式サイトより引用 https://support.google.com/androidauto
- ナビゲーション
- 電話
- ホーム画面
- 音楽再生
- 車アプリ
■Android Autoの使い方
Android Autoでは音声入力による操作が前提です。音声入力やその他の操作で以下の機能を使用できます。
・電話
- 発信(音声入力)
「Call Cody White」「Call XXX-XXX-XXX」のように、「Call」の後に名前(電話帳に登録されている)や電話番号を言うだけで発信が可能です。 - 発信(番号入力)
ホーム画面下部の電話アイコンを押し、表示されるダイヤル画面から発信可能です。 - 着信応答
着信を受けると、ホーム画面上にNotificationが表示されます。それをタッチすることで、着信応答できます。 - 不在着信応答
不在着信情報は、ホーム画面上のNotificationとして表示されます。それをタッチすることで、不在着信に応答できます。 - 留守電や通話履歴の参照
ホーム画面下部の電話アイコンを押し、メニューから選択します。
・テキストメッセージの送信
- テキスト送信
「Text Cody White」「Text XXX-XXX-XXX」のように、「Text」の後に名前(電話帳に登録されている)や電話番号を言うだけでテキスト送信機能が起動します。
アプリの音声ガイダンスに従ってテキスト本文を音声入力し、最終的に「send」で送信、「cancel」で取り止めます。
- テキスト受信
受信すると、ホーム画面上にNotificationが表示されます。それをタッチすることで、受信したテキストが音声で読み上げられます。
- テキスト返信
「reply」と話すことで、最後に受信したテキストに対する返信を開始します。
アプリの音声ガイダンスに従ってテキスト本文を音声入力し、最終的に「send」で送信、「cancel」で取り止めます。
・リマインダーの設定
- 時間ベースのリマインダー
「Remind me to call John at 7pm.」
「Remind me to pick up the cake this afternoon.」
上記のように、正確またはおおよその時刻と合わせて音声入力することで、リマインダーが登録され、その時間になるとHome画面にNotificationが表示されます。
- 場所ベースのリマインダー
「Remind me to buy coffee beans when I get to Starbucks.」
「Remind me to bring in the groceries when I get to my destination.」
「Remind me to call mom when I get home.」
上記のように、正確またはおおよその場所と合わせて音声入力することでリマインダーが登録され、その場所に到着するとHome画面にNotificationが表示されます。
・目的地ナビゲーションの取得
- 音声によるナビ検索
「Navigate to Union Square, San Francisco」
「Directions to Philz Coffee.」
「Directions to 1600 Amphitheatre Parkway, Mountain View.」
上記のように目的地を音声入力するだけで、ナビが開始されます。 - 手操作によるナビ検索
ホーム画面下部のナビゲーションアイコンを押し、操作します。 - 交通情報の取得
交通情報に合わせた表示更新はリアルタイムに行われます。メニューの設定から交通情報表示をオフにすることも可能です。
・Google Mapからの目的地候補取得
- 目的地候補の取得
ホーム画面下部のナビゲーションアイコンから、人気のスポットや過去に行ったことのある目的地候補を取得できます。 - カテゴリ検索
ホーム画面下部のナビゲーションアイコンから、目的地のカテゴリ検索が可能です。
・音楽再生
「play music.」と言うだけで、"I'm feeling lucky"プレイリストがデフォルトで再生されます。特定の曲やアーティストを指定する場合は、「play」の後に続けて音声入力します。
----------
以上が、Android Autoの使用方法になります。
音声入力によるカーナビ操作は、運転中でもかなり便利そうです。
ただし、それだけ音声入力が肝になるため、
日本語対応には時間がかかっているのかもしれません。
近い将来、日本でもAndroid Autoを使用できるのが待ち遠しいですね。
日本語対応には時間がかかっているのかもしれません。
近い将来、日本でもAndroid Autoを使用できるのが待ち遠しいですね。
[コラム]どうなった?Android Auto -使用方法編-
by 匿名 with No comments
※Android Auto公式サイトより引用 https://www.android.com/intl/ja_jp/auto/
このブログでも何回か触れているAndroid Autoですが、その後どうなっているのでしょうか。
現在のAndroid Autoについてまとめました。
Android Auto対応カーナビも続々発売されています。
しかし、現在利用可能な国はアメリカ、イギリス、オーストラリアだけです。
日本では、以下の日本語公式サイトが存在するものの、まだ利用できません。
https://www.android.com/intl/ja_jp/auto/
Android Autoに対応したアプリも配信されており、Google Playでもまとめられているようですが、
こちらも日本からはアクセスできません。
http://g.co/androidauto
日本でまだ利用できないのは残念ですが、
正式なサービスが始まっているため、いくつかの新情報もあります。
今回は、以下のURLで解説されているAndroid Autoの使用方法についてまとめました。
https://support.google.com/androidauto
■環境
・Android Autoの動作環境
- Android Autoに対応したAndroid端末(Lollipop)
車載カーナビとはUSBケーブルで接続します。
また、カーナビとAndroid端末間ではBluetooth通信も使用します。 - Android Auto公式アプリ(上記Android端末にインストール必須)
- Android Autoに対応した車
・Android Autoで未対応の動作
おそらく安全面の理由から、以下の動作は未対応とされています。- Android Auto対応アプリ以外の端末操作(車載カーナビとUSBケーブル接続中)
- テレビ、youtubeなどの動画再生
- 文字入力キーボードの使用
・その他
- Android Autoで使用するデータ通信は、Android端末上で発生する量と同等。
外部と通信するのはあくまでAndroid端末のみ、ということになります。 - Android Auto使用中、Android端末はUSBケーブルを通じて給電される。
極端にバッテリーを消耗するAndroid Autoアプリがない限り、バッテリーの心配はなさそうです。 - GPSが内蔵されている車であれば、Android端末は車側のGPS信号を使用できる。
仕組みは不明ですが、Android端末側のGPS精度は気にしなくて良いようです。
■画面構成
・ホーム画面
Android Auto開始後、カーナビのディスプレイにはAndroid Autoのホーム画面が表示されます。ホーム画面の構成は以下のようになっています。

※Android Auto公式サイトより引用 https://support.google.com/androidauto

※Android Auto公式サイトより引用 https://support.google.com/androidauto
- ナビゲーション通知
- リマインダー
- 音声コマンド
マイクアイコンをタッチすることで、音声入力が可能になり、以下の操作が行えます。
・音楽再生(曲名)
・地図のルート検索
・電話発信
・スケジュールの取得
・アプリ選択
ホーム画面の下部にはアプリカテゴリのアイコンがあり、選択するとAndroid端末内にインストールされているAndroid Auto対応アプリのリストが表示されます。
※Android Auto公式サイトより引用 https://support.google.com/androidauto
- ナビゲーション
- 電話
- ホーム画面
- 音楽再生
- 車アプリ
■Android Autoの使い方
Android Autoでは音声入力による操作が前提です。音声入力やその他の操作で以下の機能を使用できます。
・電話
- 発信(音声入力)
「Call Cody White」「Call XXX-XXX-XXX」のように、「Call」の後に名前(電話帳に登録されている)や電話番号を言うだけで発信が可能です。 - 発信(番号入力)
ホーム画面下部の電話アイコンを押し、表示されるダイヤル画面から発信可能です。 - 着信応答
着信を受けると、ホーム画面上にNotificationが表示されます。それをタッチすることで、着信応答できます。 - 不在着信応答
不在着信情報は、ホーム画面上のNotificationとして表示されます。それをタッチすることで、不在着信に応答できます。 - 留守電や通話履歴の参照
ホーム画面下部の電話アイコンを押し、メニューから選択します。
・テキストメッセージの送信
- テキスト送信
「Text Cody White」「Text XXX-XXX-XXX」のように、「Text」の後に名前(電話帳に登録されている)や電話番号を言うだけでテキスト送信機能が起動します。
アプリの音声ガイダンスに従ってテキスト本文を音声入力し、最終的に「send」で送信、「cancel」で取り止めます。
- テキスト受信
受信すると、ホーム画面上にNotificationが表示されます。それをタッチすることで、受信したテキストが音声で読み上げられます。
- テキスト返信
「reply」と話すことで、最後に受信したテキストに対する返信を開始します。
アプリの音声ガイダンスに従ってテキスト本文を音声入力し、最終的に「send」で送信、「cancel」で取り止めます。
・リマインダーの設定
- 時間ベースのリマインダー
「Remind me to call John at 7pm.」
「Remind me to pick up the cake this afternoon.」
上記のように、正確またはおおよその時刻と合わせて音声入力することで、リマインダーが登録され、その時間になるとHome画面にNotificationが表示されます。
- 場所ベースのリマインダー
「Remind me to buy coffee beans when I get to Starbucks.」
「Remind me to bring in the groceries when I get to my destination.」
「Remind me to call mom when I get home.」
上記のように、正確またはおおよその場所と合わせて音声入力することでリマインダーが登録され、その場所に到着するとHome画面にNotificationが表示されます。
・目的地ナビゲーションの取得
- 音声によるナビ検索
「Navigate to Union Square, San Francisco」
「Directions to Philz Coffee.」
「Directions to 1600 Amphitheatre Parkway, Mountain View.」
上記のように目的地を音声入力するだけで、ナビが開始されます。 - 手操作によるナビ検索
ホーム画面下部のナビゲーションアイコンを押し、操作します。 - 交通情報の取得
交通情報に合わせた表示更新はリアルタイムに行われます。メニューの設定から交通情報表示をオフにすることも可能です。
・Google Mapからの目的地候補取得
- 目的地候補の取得
ホーム画面下部のナビゲーションアイコンから、人気のスポットや過去に行ったことのある目的地候補を取得できます。 - カテゴリ検索
ホーム画面下部のナビゲーションアイコンから、目的地のカテゴリ検索が可能です。
・音楽再生
「play music.」と言うだけで、"I'm feeling lucky"プレイリストがデフォルトで再生されます。特定の曲やアーティストを指定する場合は、「play」の後に続けて音声入力します。
----------
以上が、Android Autoの使用方法になります。
音声入力によるカーナビ操作は、運転中でもかなり便利そうです。
ただし、それだけ音声入力が肝になるため、
日本語対応には時間がかかっているのかもしれません。
近い将来、日本でもAndroid Autoを使用できるのが待ち遠しいですね。
日本語対応には時間がかかっているのかもしれません。
近い将来、日本でもAndroid Autoを使用できるのが待ち遠しいですね。
2015年3月17日火曜日
はじめに
本記事は、Googleから発表されているAndroid Autoの特徴や機能に関してまとめた記事です。
Android Autoの現在使用可能な機能、将来的に使用出来る機能およびそのアプリケーションの構成に関して、大きく分けて以下のようにまとめています。(2015/03/13時点)
- Android Autoとは
- Android Autoの動作環境
- Android Appについて
- 今後の展望について
※本記事を記載するにあたって、以下のURLを参考にしております。
- Android Auto公式
- Android Auto: The right information for the road ahead
- Android Auto Demo at Google I/O 2014
- Google Developers Building Apps for Auto
- Devbytes Android Auto Audid
◆Android Autoに関してまとめたPDFがこちらからダウンロード出来ます。
http://www.brilliantservice. co.jp/bril-tech-blogspot/ about_android_auto.pdf
http://www.brilliantservice.
Android Autoとは?
1概要
1.1 Android Auto
Android Autoとは、Android端末とカーナビ等の車載器(テレマティクス)と連動するシステムです。
ユーザーは車載機の操作のみでAndroid端末と連携でき、サービス、メールの確認、
音楽の再生、目的地までのナビゲーションなどのサービスを受けることが出来ます。
1.2 特徴
Android Autoに関する公式な発表では、まだ一部しか公開されていませんが、Googleから発表されている動画や実際にハンズオンしている動画を見ると、
以下のような特徴が見て取れます。
- Android端末とAndroid Auto搭載の車載機をUSBケーブルでつなぐことで連携を開始します。
- Android Autoはタッチパネルによる操作のみでなく、音声入力によるハンズフリー操作、そして対話型の操作が可能です。
Android端末との連携では、以下のような機能が想定されています。
※現在開発方法が公開されているのは、音楽再生、通知機能のみです。
※現在開発方法が公開されているのは、音楽再生、通知機能のみです。
- 音声認識
- メールや通知に対する返信の作成
- 別アプリの起動および操作
- 音声再生
- メール・リマインダーやスケジュール通知の読み上げ
- 音楽再生
- スマートフォン内の音楽データの再生
- 電話機能
- スマートフォン内の電話帳から電話
- ダイヤル入力による電話
- 通知機能
- 通知を選択すると、内容の音声読み上げ
- 通知に対しての返信
- Google Mapによるナビゲーション
Android Autoの動作環境
1 Android Auto動作環境の構成
現在公開されているAndroid Autoアプリの開発環境は以下のようになっています。
図 2.1.1
以下の表にAndroid Auto動作環境の構成に関しての用語をまとめておきます。
Android Auto
API Simulators
|
車載機側プラットフォームのシュミレータアプリ。
このアプリ上で、Android Autoアプリの動作が確認できる。
現在はオーディオ系とNotification系の2種類が存在する。
|
Android Auto App
|
Android Auto向けに拡張したAndroidアプリ。
|
Android Auto APPについて
1 Android Autoでできること
Android Autoアプリの開発方法については、以下の2機能が公開されています。(2015/03/13時点)
1.1 AndroidAuto音楽再生
- 車載機上からのスマートフォン内の音楽データの再生
シミュレーターアプリと連携する前に聞いていた音楽を、
シミュレーターアプリ上でも再生することが出来ます。
- スマートフォン内の音楽アプリと同等のプレイリストを取得、閲覧
シミュレーターアプリでも再生する音楽リストを閲覧、選択することが出来ます。
1.2 AndroidAutoNotification
- 車載機器へのNotification送信
Notificationを車載機器側(現在はシミュレーターアプリ上)に通知できます。
- 車載機器からの既読通知を受信
既読になったことをIntent通知で受け取ることができます。
- 車載機器からの返信を受信
その内容をIntent通知で受け取ることができます。
※動作確認の方法やシミュレーター、アプリの作成方法に関してはこちらの記事を参考にしてください。
今後の展望について
1アプリケーションについて
1.1 Googleが想定しているアプリケーションの構成
Googleが発表している動画で、音楽再生アプリを例に以下のアプリ構成図にて解説を行なっています。Android Auto アプリケーションの構成に関しての説明をしているもので、2章で記載していたものとは構成が異なります。
このような構成にすることによって、既存のアプリケーションを1から作り直すことなく、Android Autoに対応させることが出来るため、将来的にはほとんどのアプリがこのような構成になるものではないかと予想されます。
図 4.1.1.1
以下の表にAndroid Auto Appを構成に関しての用語をまとめておきます。
My Audio App
|
スマートフォン上で動く MusicPlayer アプリケーション
|
Android Auto App
|
“Auto enable car”上で車載器用に設計されたUIを表示し、操作を“My Audio App”へ中継するアプリケーション
|
Auto enable car
|
Android Auto 機能対応車載機。”Android Auto App” を表示する。
|
上記のように、My Android App(既存の一般的なアプリケーション)をAndroid Auto Appという中継アプリとの連携させることで、Auto enabled car(車載機)上からMy Android Appを操作することが可能になるという構成になっています。
つまり、Android Auto App自体はただのコントローラーであり、実際に処理が行われているのはスマートフォン上にあるMy Audio Appであるという仕組みです。
1.2 想定されるアプリケーションの使用例
上記のような構成から将来的には、
以下のような使用方法が出来るのではないかと予想されます。
※例として、既存のアプリケーション(スケジュール管理や音声で別アプリを起動出来る物)がAndroid Auto Appに拡張されたとします。
乗車前:スマートフォン内のアプリにスケジュールなどを登録しておく
車載器とスマートフォンを接続
乗車後 1:車載器から、スケジュールの通知がされる。
乗車後 2:続けて車載マイクからに向けて、入力を行う。
例) メールの作成、別アプリ起動、SNS投稿
図 4.1.2.1
乗車前:スマートフォン内のアプリにスケジュールなどを登録しておく
図 4.1.2.4 乗車後 2:続けて車載マイクから、入力を行う 1
図 4.1.2.5 乗車後 2:続けて車載マイクから、入力を行う 2
2 懸念点
Android Autoに関して、以下のような懸念点があります。(2015/03/13時点)
- Android Auto(車載器側)が非公開であること
Android Auto搭載ナビがまだ発売されておらず(※1)、
APIおよびプラットフォームに関する情報が非公開になっています。
ナビOS上にAndroid AutoのVMまたはアプリケーションが起動されるのか、
どのようにアプリケーションが起動され、制御されるか不明な状態です。
- Android Autoのすべての機能が公開されていないこと
現在、公式PV等などではGoogle Mapや音声認識等がデモで行われていますが、
音楽再生機能とメッセージ通知機能のみが一般的に公開されています。
Googleの狙いとしては、既存のアプリケーションやサービスを多少の変更のみでAndroid Auto Appとして拡張出来ることをコンセプトとしているようですが、その実現方法などは未だに非公開です。
- アプリ審査・公開の問題
UIなどの観点からすべてのアプリが公開されるのは難しいと予想されます。
Android Auto Appは安全審査を行うとありますが、
運転中に使用しても問題ないUIの設計を遵守されているか、
運転を阻害する機能が備わっていないか等の、
アプリケーション機能のすべてを網羅出来るか。
又、Googleの審査を通ったとしても、
日本の基準に公開されたアプリケーションが適しているか等の問題点もあります。(※2)
命に関わる問題なので、とても容易ではない事が予想出来ます。
※1: パイオニア株式会社の連結子会社であるPioneer Electronics (USA) Inc.から3月に北米、西欧で発売予定(日本国内での販売は今のところ無し)
※2:Android Auto公式ページでも、「運転中に便利な機能」には「音楽(日本国内対応未定)」と記載されています。
免責事項
本資料に掲載された情報は、より多くの方々にAndroid Autoを知っていただき、技術に触れ、役立てて頂くことを目的としたものです。
本資料に掲載された情報の利用にあたっては各自の判断に基づき行うものとし、それによって生じた一切の損害について弊社および情報提供者は一切の責任を負いません。
[コラム] Android Autoの機能と今後について
by 匿名 with No comments
はじめに
本記事は、Googleから発表されているAndroid Autoの特徴や機能に関してまとめた記事です。
Android Autoの現在使用可能な機能、将来的に使用出来る機能およびそのアプリケーションの構成に関して、大きく分けて以下のようにまとめています。(2015/03/13時点)
- Android Autoとは
- Android Autoの動作環境
- Android Appについて
- 今後の展望について
※本記事を記載するにあたって、以下のURLを参考にしております。
- Android Auto公式
- Android Auto: The right information for the road ahead
- Android Auto Demo at Google I/O 2014
- Google Developers Building Apps for Auto
- Devbytes Android Auto Audid
◆Android Autoに関してまとめたPDFがこちらからダウンロード出来ます。
http://www.brilliantservice. co.jp/bril-tech-blogspot/ about_android_auto.pdf
http://www.brilliantservice.
Android Autoとは?
1概要
1.1 Android Auto
Android Autoとは、Android端末とカーナビ等の車載器(テレマティクス)と連動するシステムです。
ユーザーは車載機の操作のみでAndroid端末と連携でき、サービス、メールの確認、
音楽の再生、目的地までのナビゲーションなどのサービスを受けることが出来ます。
1.2 特徴
Android Autoに関する公式な発表では、まだ一部しか公開されていませんが、Googleから発表されている動画や実際にハンズオンしている動画を見ると、
以下のような特徴が見て取れます。
- Android端末とAndroid Auto搭載の車載機をUSBケーブルでつなぐことで連携を開始します。
- Android Autoはタッチパネルによる操作のみでなく、音声入力によるハンズフリー操作、そして対話型の操作が可能です。
Android端末との連携では、以下のような機能が想定されています。
※現在開発方法が公開されているのは、音楽再生、通知機能のみです。
※現在開発方法が公開されているのは、音楽再生、通知機能のみです。
- 音声認識
- メールや通知に対する返信の作成
- 別アプリの起動および操作
- 音声再生
- メール・リマインダーやスケジュール通知の読み上げ
- 音楽再生
- スマートフォン内の音楽データの再生
- 電話機能
- スマートフォン内の電話帳から電話
- ダイヤル入力による電話
- 通知機能
- 通知を選択すると、内容の音声読み上げ
- 通知に対しての返信
- Google Mapによるナビゲーション
Android Autoの動作環境
1 Android Auto動作環境の構成
現在公開されているAndroid Autoアプリの開発環境は以下のようになっています。
図 2.1.1
以下の表にAndroid Auto動作環境の構成に関しての用語をまとめておきます。
Android Auto
API Simulators
|
車載機側プラットフォームのシュミレータアプリ。
このアプリ上で、Android Autoアプリの動作が確認できる。
現在はオーディオ系とNotification系の2種類が存在する。
|
Android Auto App
|
Android Auto向けに拡張したAndroidアプリ。
|
Android Auto APPについて
1 Android Autoでできること
Android Autoアプリの開発方法については、以下の2機能が公開されています。(2015/03/13時点)
1.1 AndroidAuto音楽再生
- 車載機上からのスマートフォン内の音楽データの再生
シミュレーターアプリと連携する前に聞いていた音楽を、
シミュレーターアプリ上でも再生することが出来ます。
- スマートフォン内の音楽アプリと同等のプレイリストを取得、閲覧
シミュレーターアプリでも再生する音楽リストを閲覧、選択することが出来ます。
1.2 AndroidAutoNotification
- 車載機器へのNotification送信
Notificationを車載機器側(現在はシミュレーターアプリ上)に通知できます。
- 車載機器からの既読通知を受信
既読になったことをIntent通知で受け取ることができます。
- 車載機器からの返信を受信
その内容をIntent通知で受け取ることができます。
※動作確認の方法やシミュレーター、アプリの作成方法に関してはこちらの記事を参考にしてください。
今後の展望について
1アプリケーションについて
1.1 Googleが想定しているアプリケーションの構成
Googleが発表している動画で、音楽再生アプリを例に以下のアプリ構成図にて解説を行なっています。Android Auto アプリケーションの構成に関しての説明をしているもので、2章で記載していたものとは構成が異なります。
このような構成にすることによって、既存のアプリケーションを1から作り直すことなく、Android Autoに対応させることが出来るため、将来的にはほとんどのアプリがこのような構成になるものではないかと予想されます。
図 4.1.1.1
以下の表にAndroid Auto Appを構成に関しての用語をまとめておきます。
My Audio App
|
スマートフォン上で動く MusicPlayer アプリケーション
|
Android Auto App
|
“Auto enable car”上で車載器用に設計されたUIを表示し、操作を“My Audio App”へ中継するアプリケーション
|
Auto enable car
|
Android Auto 機能対応車載機。”Android Auto App” を表示する。
|
上記のように、My Android App(既存の一般的なアプリケーション)をAndroid Auto Appという中継アプリとの連携させることで、Auto enabled car(車載機)上からMy Android Appを操作することが可能になるという構成になっています。
つまり、Android Auto App自体はただのコントローラーであり、実際に処理が行われているのはスマートフォン上にあるMy Audio Appであるという仕組みです。
1.2 想定されるアプリケーションの使用例
上記のような構成から将来的には、
以下のような使用方法が出来るのではないかと予想されます。
※例として、既存のアプリケーション(スケジュール管理や音声で別アプリを起動出来る物)がAndroid Auto Appに拡張されたとします。
乗車前:スマートフォン内のアプリにスケジュールなどを登録しておく
車載器とスマートフォンを接続
乗車後 1:車載器から、スケジュールの通知がされる。
乗車後 2:続けて車載マイクからに向けて、入力を行う。
例) メールの作成、別アプリ起動、SNS投稿
図 4.1.2.1
乗車前:スマートフォン内のアプリにスケジュールなどを登録しておく
図 4.1.2.4 乗車後 2:続けて車載マイクから、入力を行う 1
図 4.1.2.5 乗車後 2:続けて車載マイクから、入力を行う 2
2 懸念点
Android Autoに関して、以下のような懸念点があります。(2015/03/13時点)
- Android Auto(車載器側)が非公開であること
Android Auto搭載ナビがまだ発売されておらず(※1)、
APIおよびプラットフォームに関する情報が非公開になっています。
ナビOS上にAndroid AutoのVMまたはアプリケーションが起動されるのか、
どのようにアプリケーションが起動され、制御されるか不明な状態です。
- Android Autoのすべての機能が公開されていないこと
現在、公式PV等などではGoogle Mapや音声認識等がデモで行われていますが、
音楽再生機能とメッセージ通知機能のみが一般的に公開されています。
Googleの狙いとしては、既存のアプリケーションやサービスを多少の変更のみでAndroid Auto Appとして拡張出来ることをコンセプトとしているようですが、その実現方法などは未だに非公開です。
- アプリ審査・公開の問題
UIなどの観点からすべてのアプリが公開されるのは難しいと予想されます。
Android Auto Appは安全審査を行うとありますが、
運転中に使用しても問題ないUIの設計を遵守されているか、
運転を阻害する機能が備わっていないか等の、
アプリケーション機能のすべてを網羅出来るか。
又、Googleの審査を通ったとしても、
日本の基準に公開されたアプリケーションが適しているか等の問題点もあります。(※2)
命に関わる問題なので、とても容易ではない事が予想出来ます。
※1: パイオニア株式会社の連結子会社であるPioneer Electronics (USA) Inc.から3月に北米、西欧で発売予定(日本国内での販売は今のところ無し)
※2:Android Auto公式ページでも、「運転中に便利な機能」には「音楽(日本国内対応未定)」と記載されています。
免責事項
本資料に掲載された情報は、より多くの方々にAndroid Autoを知っていただき、技術に触れ、役立てて頂くことを目的としたものです。
本資料に掲載された情報の利用にあたっては各自の判断に基づき行うものとし、それによって生じた一切の損害について弊社および情報提供者は一切の責任を負いません。
2014年12月4日木曜日
Android Auto用の音楽再生アプリを作ってみました。まずは再生、曲送りと曲戻しのみ行う簡単なものから挑戦しました。再生操作にはMediaSessionクラスを使用します。
■通常の音楽再生アプリと違う点
Android Auto用の音楽再生アプリは車載デバイスのためのオーディオサービスを提供します。このサービスによって、車載デバイスはメディアデータの一覧を参照し、カーステレオなどから音楽を再生することができます。■専用リソースファイルのメタデータ定義
AndoridManifestファイルにはapplicationタグ内に以下のように定義し、<meta-data
android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc" />
別途、専用リソースファイル\res\xml\automotive_app_desc.xmlを用意します。
■専用リソースファイルの定義
AndroidManifestファイルで定義した専用リソースファイルautomotive_app_desc.xmlには以下のように記載します。音楽を再生するためのクラスを使用する場合は"media"を定義します。メッセージアプリを使用する場合は"notification"と定義します。<automotiveapp/>
<uses name="media"/>
</automotiveapp/>
■サービスの実装
AndroidManifestファイルで定義したMediaBrowserService継承サービスを実装します。onGetRoot()とonLoadChildren()の実装が必須です。■MediaSessionクラスについて
音楽再生操作を行うため、MediaSessionクラスを使用しています。MediaSessionクラスは、一連のメディア再生処理を「セッション」とし、他のクラス(MediaControllerクラス、MediaController.TransportControlsクラスなど)と紐づいて再生操作を一括して管理することができます。 関連クラスを含め、具体的に下記のことができます。- 再生、一時停止や曲送りなどの再生操作
- 再生情報の表示
- 音量変更
- 再生状態の変更やメディアボタンのイベントをコールバックで取得
■クラス変数とonCreate()の実装
MediaBrowserService継承サービス、AndroidAutoMediaServiceクラスを定義しました。再生操作にMediaSessionクラス、再生処理にMediaPlayerクラスを使用しています。他に再生データをリスト管理するmPlayingQueue、現在の再生インデックスを保持するmCurrentQueueIndexを定義しています。onCreate()ではMediaSessionクラスの生成およびコールバックの設定などを行っています。
public class AndroidAutoMediaService extends MediaBrowserService implements
OnPreparedListener, OnCompletionListener, OnErrorListener{
private MediaSession mMediaSession; // MediaSessionクラス
private MediaPlayer mMediaPlayer; // MediaPlayerクラス
private List<MediaSession.QueueItem> mPlayingQueue; // 再生キューリスト
private int mCurrentQueueIndex; // 再生キューのインデックス
private static final String MEDIA_ID_ROOT = "__ROOT__";
@Override
public void onCreate() {
super.onCreate();
// 再生リストのオブジェクトを作る
mPlayingQueue = new ArrayList<MediaSession.QueueItem>();
// MediaSessionを生成
mMediaSession = new MediaSession(this, "MyMediaSession");
setSessionToken(mMediaSession.getSessionToken());
// コールバックを設定
mMediaSession.setCallback(new MyMediaSessionCallback());
// 再生キューの位置を初期化
mCurrentQueueIndex = 0;
}
■onGetRoot()とonLoadChildren()の実装
onGetRoot()とonLoadChildren()の実装をします。onGetRoot()について今回はROOTを固定で返していますが、引数のclientPackageNameおよびclientUidでクライアントを判断してnullを返すことで、特定のクライアント以外からの参照を許可しないようにすることもできます。onLoadChildren()はメディア項目に関する情報を返すメソッドで、引数のresultにデータを設定します。MediaItemの種類としてFLAG_PLAYABLEとFLAG_BROWSABLEがあります。リスト選択によって再生を開始したい場合はFLAG_PLAYABLEを、リストの表示のみを行いたい場合はFLAG_BROWSABLEを設定してください。FLAG_PLAYABLE設定時にリスト選択をすると後述のMediaSessionクラスのコールバックメソッドonPlayFromMediaId()がコールされますので、そのタイミングで再生処理を行います。
@Override
public BrowserRoot onGetRoot(String clientPackageName, int clientUid,
Bundle rootHints) {
return new BrowserRoot(MEDIA_ID_ROOT, null);
}
@Override
public void onLoadChildren(String parentId, Result <List<MediaItem>> result) {
List<MediaBrowser.MediaItem> mediaItems = new ArrayList<MediaBrowser.MediaItem>();
// 再生データ情報の設定
MediaDescription.Builder mdb1 = new MediaDescription.Builder();
// 再生データ1
final Bundle mediaBundle1 = new Bundle();
mediaBundle1.putString("Path", "mnt/sdcard/M01.mp3"); // データパス
mediaBundle1.putInt("Index", 0); // 曲のインデックス
mdb1.setMediaId("MediaID01"); // メディアID
mdb1.setTitle("Title01"); // タイトル
mdb1.setSubtitle("SubTitle01"); // サブタイトル
mdb1.setExtras(mediaBundle1);
// 再生データ2
MediaDescription.Builder mdb2 = new MediaDescription.Builder();
final Bundle mediaBundle2 = new Bundle();
mediaBundle2.putString("Path", "mnt/sdcard/M02.mp3"); // データパス
mediaBundle2.putInt("Index", 1); // 曲のインデックス
mdb2.setMediaId("MediaID02"); // メディアID
mdb2.setTitle("Title02"); // タイトル
mdb2.setSubtitle("SubTitle02"); // サブタイトル
mdb2.setExtras(mediaBundle2);
mediaItems.add(new MediaBrowser.MediaItem(mdb1.build(),
MediaBrowser.MediaItem.FLAG_PLAYABLE));
mediaItems.add(new MediaBrowser.MediaItem(mdb2.build(),
MediaBrowser.MediaItem.FLAG_PLAYABLE));
// sendResult()をコールする前にdetach()のコールが必要
result.detach();
result.sendResult(mediaItems);
// 再生キューをセッションに設定
mPlayingQueue.add(new MediaSession.QueueItem(mdb1.build(), 0));
mPlayingQueue.add(new MediaSession.QueueItem(mdb2.build(), 1));
mMediaSession.setQueue(mPlayingQueue);
}
■再生処理を実装
MediaPlayerクラスによる再生処理を行うメソッドを実装します。基本的なMediaPlayerの実装手順で問題ありません。再生データのパスはMediaSession.QueueItemで管理させています。 private void playMusic() {
// プレイヤー生成と準備(生成済みの場合はリセット)
if (mMediaPlayer == null) {
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnErrorListener(this);
} else {
mMediaPlayer.reset();
}
// 現在のキュー位置を元に再生データのパスを取得する
MediaSession.QueueItem queueItem = mPlayingQueue.get(mCurrentQueueIndex);
String path = queueItem.getDescription().getExtras().getString("Path");
// MediaPlayerのデータ設定と準備(非同期)
try {
mMediaPlayer.setDataSource(path);
mMediaPlayer.prepareAsync();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onPrepared(MediaPlayer mp) {
// 再生準備完了通知を受け、再生を行う
if(mMediaPlayer != null) {
mMediaPlayer.start();
}
}
■MediaSessionクラスのコールバック
MediaSessionのコールバックを下記のように実装します。リストを選択するとonPlayFromMediaId()、曲送りを選択するとonSkipToNext()、曲戻しを選択するとonSkipToPrevious()がコールされます。 private final class MyMediaSessionCallback extends MediaSession.Callback {
@Override
public void onPlay() {
playMusic();
}
// リスト選択時にコールされる
@Override
public void onPlayFromMediaId(String mediaId, Bundle extras) {
// MediaIDを元に曲のインデックス番号を検索し、設定する。
for(int i = 0; i < mPlayingQueue.size(); i++) {
MediaSession.QueueItem queueItem = mPlayingQueue.get(i);
MediaDescription md = queueItem.getDescription();
if(mediaId.equals(md.getMediaId())) {
mCurrentQueueIndex = md.getExtras().getInt("Index");
}
}
playMusic();
}
@Override
public void onSkipToNext() {
// 再生キューの位置を次へ
mCurrentQueueIndex++;
if (mCurrentQueueIndex >= mPlayingQueue.size()) {
mCurrentQueueIndex = 0;
}
playMusic();
}
@Override
public void onSkipToPrevious() {
// 再生キューの位置を前へ
mCurrentQueueIndex--;
if (mCurrentQueueIndex < 0) {
mCurrentQueueIndex = 0;
}
playMusic();
}
■onDestroy()の実装
終了処理を実装します。 @Override
public void onDestroy() {
super.onDestroy();
// MediaSessionの終了処理
mMediaSession.setCallback(null);
mMediaSession.release();
// MediaPlayerの終了処理
if(mMediaPlayer != null) {
mMediaPlayer.setOnPreparedListener(null);
mMediaPlayer.setOnCompletionListener(null);
mMediaPlayer.setOnErrorListener(null);
mMediaPlayer.release();
mMediaPlayer = null;
}
}
今回は割愛しましたが、MediaSessionクラスを正確に動作させるためには、setPlaybackState()にて再生状態や停止状態などを操作に合わせて設定する必要があります。MediaSessioinおよびその関連クラスについては下記を参照してください。
http://developer.android.com/reference/android/media/session/package-summary.html
Android Auto用音楽再生アプリの作り方
by 匿名 with No comments
Android Auto用の音楽再生アプリを作ってみました。まずは再生、曲送りと曲戻しのみ行う簡単なものから挑戦しました。再生操作にはMediaSessionクラスを使用します。
■通常の音楽再生アプリと違う点
Android Auto用の音楽再生アプリは車載デバイスのためのオーディオサービスを提供します。このサービスによって、車載デバイスはメディアデータの一覧を参照し、カーステレオなどから音楽を再生することができます。■専用リソースファイルのメタデータ定義
AndoridManifestファイルにはapplicationタグ内に以下のように定義し、<meta-data
android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc" />
別途、専用リソースファイル\res\xml\automotive_app_desc.xmlを用意します。
■専用リソースファイルの定義
AndroidManifestファイルで定義した専用リソースファイルautomotive_app_desc.xmlには以下のように記載します。音楽を再生するためのクラスを使用する場合は"media"を定義します。メッセージアプリを使用する場合は"notification"と定義します。<automotiveapp/>
<uses name="media"/>
</automotiveapp/>
■サービスの実装
AndroidManifestファイルで定義したMediaBrowserService継承サービスを実装します。onGetRoot()とonLoadChildren()の実装が必須です。■MediaSessionクラスについて
音楽再生操作を行うため、MediaSessionクラスを使用しています。MediaSessionクラスは、一連のメディア再生処理を「セッション」とし、他のクラス(MediaControllerクラス、MediaController.TransportControlsクラスなど)と紐づいて再生操作を一括して管理することができます。 関連クラスを含め、具体的に下記のことができます。- 再生、一時停止や曲送りなどの再生操作
- 再生情報の表示
- 音量変更
- 再生状態の変更やメディアボタンのイベントをコールバックで取得
■クラス変数とonCreate()の実装
MediaBrowserService継承サービス、AndroidAutoMediaServiceクラスを定義しました。再生操作にMediaSessionクラス、再生処理にMediaPlayerクラスを使用しています。他に再生データをリスト管理するmPlayingQueue、現在の再生インデックスを保持するmCurrentQueueIndexを定義しています。onCreate()ではMediaSessionクラスの生成およびコールバックの設定などを行っています。
public class AndroidAutoMediaService extends MediaBrowserService implements
OnPreparedListener, OnCompletionListener, OnErrorListener{
private MediaSession mMediaSession; // MediaSessionクラス
private MediaPlayer mMediaPlayer; // MediaPlayerクラス
private List<MediaSession.QueueItem> mPlayingQueue; // 再生キューリスト
private int mCurrentQueueIndex; // 再生キューのインデックス
private static final String MEDIA_ID_ROOT = "__ROOT__";
@Override
public void onCreate() {
super.onCreate();
// 再生リストのオブジェクトを作る
mPlayingQueue = new ArrayList<MediaSession.QueueItem>();
// MediaSessionを生成
mMediaSession = new MediaSession(this, "MyMediaSession");
setSessionToken(mMediaSession.getSessionToken());
// コールバックを設定
mMediaSession.setCallback(new MyMediaSessionCallback());
// 再生キューの位置を初期化
mCurrentQueueIndex = 0;
}
■onGetRoot()とonLoadChildren()の実装
onGetRoot()とonLoadChildren()の実装をします。onGetRoot()について今回はROOTを固定で返していますが、引数のclientPackageNameおよびclientUidでクライアントを判断してnullを返すことで、特定のクライアント以外からの参照を許可しないようにすることもできます。onLoadChildren()はメディア項目に関する情報を返すメソッドで、引数のresultにデータを設定します。MediaItemの種類としてFLAG_PLAYABLEとFLAG_BROWSABLEがあります。リスト選択によって再生を開始したい場合はFLAG_PLAYABLEを、リストの表示のみを行いたい場合はFLAG_BROWSABLEを設定してください。FLAG_PLAYABLE設定時にリスト選択をすると後述のMediaSessionクラスのコールバックメソッドonPlayFromMediaId()がコールされますので、そのタイミングで再生処理を行います。
@Override
public BrowserRoot onGetRoot(String clientPackageName, int clientUid,
Bundle rootHints) {
return new BrowserRoot(MEDIA_ID_ROOT, null);
}
@Override
public void onLoadChildren(String parentId, Result <List<MediaItem>> result) {
List<MediaBrowser.MediaItem> mediaItems = new ArrayList<MediaBrowser.MediaItem>();
// 再生データ情報の設定
MediaDescription.Builder mdb1 = new MediaDescription.Builder();
// 再生データ1
final Bundle mediaBundle1 = new Bundle();
mediaBundle1.putString("Path", "mnt/sdcard/M01.mp3"); // データパス
mediaBundle1.putInt("Index", 0); // 曲のインデックス
mdb1.setMediaId("MediaID01"); // メディアID
mdb1.setTitle("Title01"); // タイトル
mdb1.setSubtitle("SubTitle01"); // サブタイトル
mdb1.setExtras(mediaBundle1);
// 再生データ2
MediaDescription.Builder mdb2 = new MediaDescription.Builder();
final Bundle mediaBundle2 = new Bundle();
mediaBundle2.putString("Path", "mnt/sdcard/M02.mp3"); // データパス
mediaBundle2.putInt("Index", 1); // 曲のインデックス
mdb2.setMediaId("MediaID02"); // メディアID
mdb2.setTitle("Title02"); // タイトル
mdb2.setSubtitle("SubTitle02"); // サブタイトル
mdb2.setExtras(mediaBundle2);
mediaItems.add(new MediaBrowser.MediaItem(mdb1.build(),
MediaBrowser.MediaItem.FLAG_PLAYABLE));
mediaItems.add(new MediaBrowser.MediaItem(mdb2.build(),
MediaBrowser.MediaItem.FLAG_PLAYABLE));
// sendResult()をコールする前にdetach()のコールが必要
result.detach();
result.sendResult(mediaItems);
// 再生キューをセッションに設定
mPlayingQueue.add(new MediaSession.QueueItem(mdb1.build(), 0));
mPlayingQueue.add(new MediaSession.QueueItem(mdb2.build(), 1));
mMediaSession.setQueue(mPlayingQueue);
}
■再生処理を実装
MediaPlayerクラスによる再生処理を行うメソッドを実装します。基本的なMediaPlayerの実装手順で問題ありません。再生データのパスはMediaSession.QueueItemで管理させています。 private void playMusic() {
// プレイヤー生成と準備(生成済みの場合はリセット)
if (mMediaPlayer == null) {
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnErrorListener(this);
} else {
mMediaPlayer.reset();
}
// 現在のキュー位置を元に再生データのパスを取得する
MediaSession.QueueItem queueItem = mPlayingQueue.get(mCurrentQueueIndex);
String path = queueItem.getDescription().getExtras().getString("Path");
// MediaPlayerのデータ設定と準備(非同期)
try {
mMediaPlayer.setDataSource(path);
mMediaPlayer.prepareAsync();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onPrepared(MediaPlayer mp) {
// 再生準備完了通知を受け、再生を行う
if(mMediaPlayer != null) {
mMediaPlayer.start();
}
}
■MediaSessionクラスのコールバック
MediaSessionのコールバックを下記のように実装します。リストを選択するとonPlayFromMediaId()、曲送りを選択するとonSkipToNext()、曲戻しを選択するとonSkipToPrevious()がコールされます。 private final class MyMediaSessionCallback extends MediaSession.Callback {
@Override
public void onPlay() {
playMusic();
}
// リスト選択時にコールされる
@Override
public void onPlayFromMediaId(String mediaId, Bundle extras) {
// MediaIDを元に曲のインデックス番号を検索し、設定する。
for(int i = 0; i < mPlayingQueue.size(); i++) {
MediaSession.QueueItem queueItem = mPlayingQueue.get(i);
MediaDescription md = queueItem.getDescription();
if(mediaId.equals(md.getMediaId())) {
mCurrentQueueIndex = md.getExtras().getInt("Index");
}
}
playMusic();
}
@Override
public void onSkipToNext() {
// 再生キューの位置を次へ
mCurrentQueueIndex++;
if (mCurrentQueueIndex >= mPlayingQueue.size()) {
mCurrentQueueIndex = 0;
}
playMusic();
}
@Override
public void onSkipToPrevious() {
// 再生キューの位置を前へ
mCurrentQueueIndex--;
if (mCurrentQueueIndex < 0) {
mCurrentQueueIndex = 0;
}
playMusic();
}
■onDestroy()の実装
終了処理を実装します。 @Override
public void onDestroy() {
super.onDestroy();
// MediaSessionの終了処理
mMediaSession.setCallback(null);
mMediaSession.release();
// MediaPlayerの終了処理
if(mMediaPlayer != null) {
mMediaPlayer.setOnPreparedListener(null);
mMediaPlayer.setOnCompletionListener(null);
mMediaPlayer.setOnErrorListener(null);
mMediaPlayer.release();
mMediaPlayer = null;
}
}
今回は割愛しましたが、MediaSessionクラスを正確に動作させるためには、setPlaybackState()にて再生状態や停止状態などを操作に合わせて設定する必要があります。MediaSessioinおよびその関連クラスについては下記を参照してください。
http://developer.android.com/reference/android/media/session/package-summary.html
2014年11月27日木曜日
公式サイトではAndroid Autoに対応したサンプルアプリが公開されていますが、若干凝った作りの為、分かりづらい部分があります。そこでサンプルアプリを元に、簡単なメッセージアプリを作ってみました。
※公式サイトのサンプルアプリは、以下のURLからダウンロード可能です。
http://github.com/googlesamples/android-MessagingService
Android Auto用メッセージアプリでは、以下のことができます。
それでは実際のアプリの作り方を見ていきましょう。
(プロジェクトフォルダ)\res\xml\automotive_app_desc.xml
メッセージ部分をタップすると、
「New message from BRIL TARO,Hello Android Auto」
と音声で読み上げてくれます。
読み終わった後に既読通知のIntentがBroadcast送信され、以下の画面に遷移します。
ここで返信ボタンを押すと、返信通知用のIntentがBroadcast送信されます。
現在のシミュレーションアプリ上では返信内容を作成できず、アプリ側には"This is a reply"の固定文言のみが返ってきますが、将来的には音声入力などにも対応すると思われます。
実際に作ってみると、意外と簡単にNotificationを表示することができました。
現状ではまだ未完成の部分もありますが、これからどうUpdateされていくのか楽しみですね。
http://github.com/googlesamples/android-MessagingService
Android Auto用メッセージアプリでは、以下のことができます。
-
車載機器へのNotification送信
Android Auto用のAPIを使用して、Notificationを車載機器側(現在はシミュレーションアプリ上)に通知できます。車載機器側でNotificationを選択すると、内容を音声で読み上げてくれます。 -
車載機器からの既読通知を受信
車載機器側でNotificationが選択される(=音声読み上げ)と、既読になったことをIntent通知で受け取ることができます。 -
車載機器からの返信を受信
車載機器側でNotificationに対する返信操作が行われると、その内容をIntent通知で受け取ることができます。
それでは実際のアプリの作り方を見ていきましょう。
■AndroidManifestファイルの記載
・BroadcastReceiverの登録
既読通知と返信通知のIntent通知を受けるために、BroadcastReceiverを登録します。 <receiver android:name=".MyMessageReadReceiver" >
<intent-filter>
<action android:name="com.example.androidautonotificationtest.ACTION_MESSAGE_READ" />
</intent-filter>
</receiver>
<receiver android:name=".MyMessageReplyReceiver" >
<intent-filter>
<action android:name="com.example.androidautonotificationtest.ACTION_MESSAGE_REPLY" />
</intent-filter>
</receiver>
・専用リソースファイルのメタデータ定義
AndoridManifestファイルには以下のように定義し、 <meta-data
android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc" />
別途、専用リソースファイルを用意します。(プロジェクトフォルダ)\res\xml\automotive_app_desc.xml
・専用リソースファイルの定義
AndroidManifestファイルで定義した専用リソースファイルには、以下のように記載します。 <automotiveapp>
<uses name="notification"/>
</automotiveapp>
■既読通知用のIntent設定
車載機器からNotificationの既読通知を受けるために、PendingIntentを生成します。- AndroidManifestファイルでBroadcastReceiverのIntent-filterに登録したアクションを、Intent#setAction()で設定する。
- Notification管理用の固有IDを、IntentのExtraに設定する。
※今回は固定値TEST_IDを使用しています。
int TEST_ID = 1;
String REPLY_ID = "conversation_id";
String READ_ACTION =
"com.example.androidautonotificationtest.ACTION_MESSAGE_READ";
Intent readIntent = new Intent()
.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)
.setAction(READ_ACTION)
.putExtra(REPLY_ID, TEST_ID);
PendingIntent readPendingIntent = PendingIntent.getBroadcast(getApplicationContext(),
TEST_ID,
readIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
■返信通知用のIntent設定
車載機器からNotificationの返信通知を受けるために、PendingIntentを生成します。- AndroidManifestファイルでBroadcastReceiverのIntent-filterに登録したアクションを、Intent#setAction()で設定する。
- Notification管理用の固有IDを、IntentのExtraに設定する。
- 返信内容のStringを受け取るためのキー(EXTRA_VOICE_REPLY)を登録する。
String REPLY_ACTION =
"com.example.androidautonotificationtest.ACTION_MESSAGE_REPLY";
String EXTRA_VOICE_REPLY = "extra_voice_reply";
Intent replyIntent = new Intent()
.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)
.setAction(REPLY_ACTION)
.putExtra(REPLY_ID, TEST_ID);
RemoteInput remoteInput = new RemoteInput.Builder(EXTRA_VOICE_REPLY)
.setLabel(getApplicationContext().getString(R.string.app_name))
.build();
PendingIntent replyPendingIntent = PendingIntent.getBroadcast(getApplicationContext(),
TEST_ID,
replyIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
■メッセージオブジェクトの生成
UnreadConversation.Builderオブジェクトを生成します。- Notification送信者の設定(TEST_NAME)
- 既読通知用/返信通知用Intentの登録
- Notification本文の登録(TEST_MESSAGE)
String TEST_NAME = "BRIL TARO";
String TEST_MESSAGE = "Hello Android Auto!";
UnreadConversation.Builder unreadConvBuilder =
new UnreadConversation.Builder(TEST_NAME)
.setReadPendingIntent(readPendingIntent)
.setReplyAction(replyPendingIntent, remoteInput);
unreadConvBuilder.addMessage(TEST_MESSAGE);
■Notificationオブジェクトの生成と送信
NotificationCompat.Builderクラスを使用して、Notificationオブジェクトを生成、送信します。 NotificationCompat.Builder notificationBuilder =
new NotificationCompat.Builder(getApplicationContext())
.setSmallIcon(R.drawable.ic_launcher)
.extend(new CarExtender()
.setUnreadConversation(unreadConvBuilder.build()));
NotificationManagerCompat mNotificationManager = NotificationManagerCompat.from(getApplicationContext());
mNotificationManager.notify(TEST_ID, notificationBuilder.build());
■既読通知用のBroadcastReceiver
既読通知用のBroadcastReceiverでは、Notification送信時に設定した管理用の固有IDを取得できます。public class MyMessageReadReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
int conversationId = intent.getIntExtra(MainActivity.REPLY_ID, -1);
}
}
■返信通知用のBroadcastReceiver
返信通知用のBroadcastReceiverでは、Notification送信時に設定した管理用の固有IDと、車載機器側が設定した返信内容を取得できます。public class MyMessageReplyReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
int conversationId = intent.getIntExtra(MainActivity.REPLY_ID, -1);
CharSequence reply;
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
if (remoteInput != null) {
reply = remoteInput.getCharSequence(MainActivity.EXTRA_VOICE_REPLY);
}
}
}
■Notificationの確認方法
上記処理を全て実装したアプリを作成して、以下の手順を行ってください。- メッセージアプリ用のシミュレーションアプリ(messaging-simulator.apk )をインストール。
※詳細は前回記事「Android AutoのAPIが公開されました」をご参照ください。 - テストアプリを起動し、Notificationを送信
※その後、ステータスバーに表示されるNotificationは開かないでください。 - シミュレーションアプリを起動
メッセージ部分をタップすると、
「New message from BRIL TARO,Hello Android Auto」
と音声で読み上げてくれます。
読み終わった後に既読通知のIntentがBroadcast送信され、以下の画面に遷移します。
ここで返信ボタンを押すと、返信通知用のIntentがBroadcast送信されます。
現在のシミュレーションアプリ上では返信内容を作成できず、アプリ側には"This is a reply"の固定文言のみが返ってきますが、将来的には音声入力などにも対応すると思われます。
実際に作ってみると、意外と簡単にNotificationを表示することができました。
現状ではまだ未完成の部分もありますが、これからどうUpdateされていくのか楽しみですね。
Android Auto用メッセージアプリの作り方
by 匿名 with No comments
公式サイトではAndroid Autoに対応したサンプルアプリが公開されていますが、若干凝った作りの為、分かりづらい部分があります。そこでサンプルアプリを元に、簡単なメッセージアプリを作ってみました。
※公式サイトのサンプルアプリは、以下のURLからダウンロード可能です。
http://github.com/googlesamples/android-MessagingService
Android Auto用メッセージアプリでは、以下のことができます。
それでは実際のアプリの作り方を見ていきましょう。
(プロジェクトフォルダ)\res\xml\automotive_app_desc.xml
メッセージ部分をタップすると、
「New message from BRIL TARO,Hello Android Auto」
と音声で読み上げてくれます。
読み終わった後に既読通知のIntentがBroadcast送信され、以下の画面に遷移します。
ここで返信ボタンを押すと、返信通知用のIntentがBroadcast送信されます。
現在のシミュレーションアプリ上では返信内容を作成できず、アプリ側には"This is a reply"の固定文言のみが返ってきますが、将来的には音声入力などにも対応すると思われます。
実際に作ってみると、意外と簡単にNotificationを表示することができました。
現状ではまだ未完成の部分もありますが、これからどうUpdateされていくのか楽しみですね。
http://github.com/googlesamples/android-MessagingService
Android Auto用メッセージアプリでは、以下のことができます。
-
車載機器へのNotification送信
Android Auto用のAPIを使用して、Notificationを車載機器側(現在はシミュレーションアプリ上)に通知できます。車載機器側でNotificationを選択すると、内容を音声で読み上げてくれます。 -
車載機器からの既読通知を受信
車載機器側でNotificationが選択される(=音声読み上げ)と、既読になったことをIntent通知で受け取ることができます。 -
車載機器からの返信を受信
車載機器側でNotificationに対する返信操作が行われると、その内容をIntent通知で受け取ることができます。
それでは実際のアプリの作り方を見ていきましょう。
■AndroidManifestファイルの記載
・BroadcastReceiverの登録
既読通知と返信通知のIntent通知を受けるために、BroadcastReceiverを登録します。 <receiver android:name=".MyMessageReadReceiver" >
<intent-filter>
<action android:name="com.example.androidautonotificationtest.ACTION_MESSAGE_READ" />
</intent-filter>
</receiver>
<receiver android:name=".MyMessageReplyReceiver" >
<intent-filter>
<action android:name="com.example.androidautonotificationtest.ACTION_MESSAGE_REPLY" />
</intent-filter>
</receiver>
・専用リソースファイルのメタデータ定義
AndoridManifestファイルには以下のように定義し、 <meta-data
android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc" />
別途、専用リソースファイルを用意します。(プロジェクトフォルダ)\res\xml\automotive_app_desc.xml
・専用リソースファイルの定義
AndroidManifestファイルで定義した専用リソースファイルには、以下のように記載します。 <automotiveapp>
<uses name="notification"/>
</automotiveapp>
■既読通知用のIntent設定
車載機器からNotificationの既読通知を受けるために、PendingIntentを生成します。- AndroidManifestファイルでBroadcastReceiverのIntent-filterに登録したアクションを、Intent#setAction()で設定する。
- Notification管理用の固有IDを、IntentのExtraに設定する。
※今回は固定値TEST_IDを使用しています。
int TEST_ID = 1;
String REPLY_ID = "conversation_id";
String READ_ACTION =
"com.example.androidautonotificationtest.ACTION_MESSAGE_READ";
Intent readIntent = new Intent()
.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)
.setAction(READ_ACTION)
.putExtra(REPLY_ID, TEST_ID);
PendingIntent readPendingIntent = PendingIntent.getBroadcast(getApplicationContext(),
TEST_ID,
readIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
■返信通知用のIntent設定
車載機器からNotificationの返信通知を受けるために、PendingIntentを生成します。- AndroidManifestファイルでBroadcastReceiverのIntent-filterに登録したアクションを、Intent#setAction()で設定する。
- Notification管理用の固有IDを、IntentのExtraに設定する。
- 返信内容のStringを受け取るためのキー(EXTRA_VOICE_REPLY)を登録する。
String REPLY_ACTION =
"com.example.androidautonotificationtest.ACTION_MESSAGE_REPLY";
String EXTRA_VOICE_REPLY = "extra_voice_reply";
Intent replyIntent = new Intent()
.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)
.setAction(REPLY_ACTION)
.putExtra(REPLY_ID, TEST_ID);
RemoteInput remoteInput = new RemoteInput.Builder(EXTRA_VOICE_REPLY)
.setLabel(getApplicationContext().getString(R.string.app_name))
.build();
PendingIntent replyPendingIntent = PendingIntent.getBroadcast(getApplicationContext(),
TEST_ID,
replyIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
■メッセージオブジェクトの生成
UnreadConversation.Builderオブジェクトを生成します。- Notification送信者の設定(TEST_NAME)
- 既読通知用/返信通知用Intentの登録
- Notification本文の登録(TEST_MESSAGE)
String TEST_NAME = "BRIL TARO";
String TEST_MESSAGE = "Hello Android Auto!";
UnreadConversation.Builder unreadConvBuilder =
new UnreadConversation.Builder(TEST_NAME)
.setReadPendingIntent(readPendingIntent)
.setReplyAction(replyPendingIntent, remoteInput);
unreadConvBuilder.addMessage(TEST_MESSAGE);
■Notificationオブジェクトの生成と送信
NotificationCompat.Builderクラスを使用して、Notificationオブジェクトを生成、送信します。 NotificationCompat.Builder notificationBuilder =
new NotificationCompat.Builder(getApplicationContext())
.setSmallIcon(R.drawable.ic_launcher)
.extend(new CarExtender()
.setUnreadConversation(unreadConvBuilder.build()));
NotificationManagerCompat mNotificationManager = NotificationManagerCompat.from(getApplicationContext());
mNotificationManager.notify(TEST_ID, notificationBuilder.build());
■既読通知用のBroadcastReceiver
既読通知用のBroadcastReceiverでは、Notification送信時に設定した管理用の固有IDを取得できます。public class MyMessageReadReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
int conversationId = intent.getIntExtra(MainActivity.REPLY_ID, -1);
}
}
■返信通知用のBroadcastReceiver
返信通知用のBroadcastReceiverでは、Notification送信時に設定した管理用の固有IDと、車載機器側が設定した返信内容を取得できます。public class MyMessageReplyReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
int conversationId = intent.getIntExtra(MainActivity.REPLY_ID, -1);
CharSequence reply;
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
if (remoteInput != null) {
reply = remoteInput.getCharSequence(MainActivity.EXTRA_VOICE_REPLY);
}
}
}
■Notificationの確認方法
上記処理を全て実装したアプリを作成して、以下の手順を行ってください。- メッセージアプリ用のシミュレーションアプリ(messaging-simulator.apk )をインストール。
※詳細は前回記事「Android AutoのAPIが公開されました」をご参照ください。 - テストアプリを起動し、Notificationを送信
※その後、ステータスバーに表示されるNotificationは開かないでください。 - シミュレーションアプリを起動
メッセージ部分をタップすると、
「New message from BRIL TARO,Hello Android Auto」
と音声で読み上げてくれます。
読み終わった後に既読通知のIntentがBroadcast送信され、以下の画面に遷移します。
ここで返信ボタンを押すと、返信通知用のIntentがBroadcast送信されます。
現在のシミュレーションアプリ上では返信内容を作成できず、アプリ側には"This is a reply"の固定文言のみが返ってきますが、将来的には音声入力などにも対応すると思われます。
実際に作ってみると、意外と簡単にNotificationを表示することができました。
現状ではまだ未完成の部分もありますが、これからどうUpdateされていくのか楽しみですね。
2014年11月19日水曜日
※Android Auto公式サイトより引用 http://www.android.com/auto/
本日、ついにAndroid AutoのAPIが公開されました。
Android Autoとは、車のカーナビのような車載デバイスとAndroid端末を連動するシステムです。Android Autoアプリを作るための環境構築方法についてまとめました。
Android Autoに対応したアプリをAndroid端末に入れて、車載デバイスと接続することで、車載デバイス側でアプリの画面を表示したり、操作することができます。
APIは以下の公式サイトで説明されています。
http://developer.android.com/training/auto/start/index.html
現状では、以下の2種類のアプリに対応しています。
オーディオ系アプリ・・・車の中でオーディオコンテンツを再生することができます。
メッセージ系アプリ・・・メールを受信するとメッセージを音声出力し、音声入力から返信メールを送信できます。
今回は、AndroidAuto向けのオーディオ系アプリを作成するまでの環境構築について、以下の流れで紹介します。
・AndroidManifestファイルの記載
・専用リソースファイルの記載
・サービスの実装
・シミュレーションアプリのインストール
・アプリの実行
上記のように、『android:resource="@xml/automotive_app_desc"』とした場合は、以下の専用リソースファイルを用意する必要があります。
(プロジェクトフォルダ)\res\xml\automotive_app_desc.xml
今回の場合は前者です。
以下の2つのメソッドが実装必須ですが、今回は空のメソッドにしておきます。
アプリはSDK Managerの「Android Auto API Simulators」からダウンロードできます。
ダウンロードが完了すると、以下のapkファイル2個が格納されます。
オーディオ系アプリ向けとメッセージ系アプリ向けに、2種類のシミュレーションアプリが用意されています。
(Android SDKフォルダ以下)\extras\google\simulators
media-browser-simulator.apk・・・オーディオ系アプリ
messaging-simulator.apk ・・・メッセージ系アプリ
今回はオーディオ系アプリを取り扱うので、media-browser-simulator.apkの方をインストールします。
※11/25修正
なお、これらのシミュレーションアプリのサンプルコードは、以下のURLからダウンロード可能です。
http://github.com/googlesamples/android-MediaBrowserService
http://github.com/googlesamples/android-MessagingService
シミュレーションアプリの「Media Sim」を起動します。
メニューボタンを押すと、作成したアプリの名前が表示されれば成功です。
今回作成したアプリでは必要最低限の実装しか行っていないため、これ以上は動作できませんが、ちゃんと実装したアプリであれば、ここから動作が確認できるはずです。
次回からは、実際に動作するAndroid Autoアプリの開発方法について、説明していきます。
本日、ついにAndroid AutoのAPIが公開されました。
Android Autoとは、車のカーナビのような車載デバイスとAndroid端末を連動するシステムです。Android Autoアプリを作るための環境構築方法についてまとめました。
Android Autoに対応したアプリをAndroid端末に入れて、車載デバイスと接続することで、車載デバイス側でアプリの画面を表示したり、操作することができます。
APIは以下の公式サイトで説明されています。
http://developer.android.com/training/auto/start/index.html
現状では、以下の2種類のアプリに対応しています。
オーディオ系アプリ・・・車の中でオーディオコンテンツを再生することができます。
メッセージ系アプリ・・・メールを受信するとメッセージを音声出力し、音声入力から返信メールを送信できます。
今回は、AndroidAuto向けのオーディオ系アプリを作成するまでの環境構築について、以下の流れで紹介します。
・AndroidManifestファイルの記載
・専用リソースファイルの記載
・サービスの実装
・シミュレーションアプリのインストール
・アプリの実行
AndroidManifestファイルの記載
ポイントは3つあります。targetSdkVersion
AndroidAutoに対応するアプリは、targetSdkVersionが21以上でなければいけません。MediaBrowserService継承サービス定義
以下のように定義します。 <service android:exported="true" android:name=".AndroidAutoMediaService">
<intent-filter>
<action android:name="android.media.browse.MediaBrowserService">
</action>
</intent-filter>
</service>
専用リソースファイルのメタデータ定義
以下のように定義します。 <meta-data
android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc" />
上記のように、『android:resource="@xml/automotive_app_desc"』とした場合は、以下の専用リソースファイルを用意する必要があります。
(プロジェクトフォルダ)\res\xml\automotive_app_desc.xml
専用リソースファイルの定義
AndroidManifestファイルで定義した専用リソースファイルには、以下のように記載します。"uses name="には、オーディオ系アプリの場合は"media"、メッセージ系アプリの場合は"notification"を設定します。今回の場合は前者です。
<automotiveapp>
<uses name="media"/>
</automotiveapp>
サービスの実装
AndroidManifestファイルで定義したMediaBrowserService継承サービスを実際に実装します。以下の2つのメソッドが実装必須ですが、今回は空のメソッドにしておきます。
public class AndroidAutoMediaService extends MediaBrowserService{
@Override
public BrowserRoot onGetRoot(String clientPackageName, int clientUid,
Bundle rootHints) {
return null;
}
@Override
public void onLoadChildren(String parentId, Result <List<MediaItem>> result) {
}
シミュレーションアプリのインストール
AndroidAuto向けアプリの動作をAndroid端末上で確認できる、シミュレーションアプリが提供されています。アプリはSDK Managerの「Android Auto API Simulators」からダウンロードできます。
ダウンロードが完了すると、以下のapkファイル2個が格納されます。
オーディオ系アプリ向けとメッセージ系アプリ向けに、2種類のシミュレーションアプリが用意されています。
(Android SDKフォルダ以下)\extras\google\simulators
media-browser-simulator.apk・・・オーディオ系アプリ
messaging-simulator.apk ・・・メッセージ系アプリ
今回はオーディオ系アプリを取り扱うので、media-browser-simulator.apkの方をインストールします。
それぞれのapkを起動すると、以下の画面が表示されます。
オーディオ系のシミュレーションアプリ
メッセージ系のシミュレーションアプリ
アプリの実行
作成したアプリをあらかじめインストールしておき、シミュレーションアプリの「Media Sim」を起動します。
メニューボタンを押すと、作成したアプリの名前が表示されれば成功です。
今回作成したアプリでは必要最低限の実装しか行っていないため、これ以上は動作できませんが、ちゃんと実装したアプリであれば、ここから動作が確認できるはずです。
次回からは、実際に動作するAndroid Autoアプリの開発方法について、説明していきます。
Android AutoのAPIが公開されました
by 匿名 with No comments
※Android Auto公式サイトより引用 http://www.android.com/auto/
本日、ついにAndroid AutoのAPIが公開されました。
Android Autoとは、車のカーナビのような車載デバイスとAndroid端末を連動するシステムです。Android Autoアプリを作るための環境構築方法についてまとめました。
Android Autoに対応したアプリをAndroid端末に入れて、車載デバイスと接続することで、車載デバイス側でアプリの画面を表示したり、操作することができます。
APIは以下の公式サイトで説明されています。
http://developer.android.com/training/auto/start/index.html
現状では、以下の2種類のアプリに対応しています。
オーディオ系アプリ・・・車の中でオーディオコンテンツを再生することができます。
メッセージ系アプリ・・・メールを受信するとメッセージを音声出力し、音声入力から返信メールを送信できます。
今回は、AndroidAuto向けのオーディオ系アプリを作成するまでの環境構築について、以下の流れで紹介します。
・AndroidManifestファイルの記載
・専用リソースファイルの記載
・サービスの実装
・シミュレーションアプリのインストール
・アプリの実行
上記のように、『android:resource="@xml/automotive_app_desc"』とした場合は、以下の専用リソースファイルを用意する必要があります。
(プロジェクトフォルダ)\res\xml\automotive_app_desc.xml
今回の場合は前者です。
以下の2つのメソッドが実装必須ですが、今回は空のメソッドにしておきます。
アプリはSDK Managerの「Android Auto API Simulators」からダウンロードできます。
ダウンロードが完了すると、以下のapkファイル2個が格納されます。
オーディオ系アプリ向けとメッセージ系アプリ向けに、2種類のシミュレーションアプリが用意されています。
(Android SDKフォルダ以下)\extras\google\simulators
media-browser-simulator.apk・・・オーディオ系アプリ
messaging-simulator.apk ・・・メッセージ系アプリ
今回はオーディオ系アプリを取り扱うので、media-browser-simulator.apkの方をインストールします。
※11/25修正
なお、これらのシミュレーションアプリのサンプルコードは、以下のURLからダウンロード可能です。
http://github.com/googlesamples/android-MediaBrowserService
http://github.com/googlesamples/android-MessagingService
シミュレーションアプリの「Media Sim」を起動します。
メニューボタンを押すと、作成したアプリの名前が表示されれば成功です。
今回作成したアプリでは必要最低限の実装しか行っていないため、これ以上は動作できませんが、ちゃんと実装したアプリであれば、ここから動作が確認できるはずです。
次回からは、実際に動作するAndroid Autoアプリの開発方法について、説明していきます。
本日、ついにAndroid AutoのAPIが公開されました。
Android Autoとは、車のカーナビのような車載デバイスとAndroid端末を連動するシステムです。Android Autoアプリを作るための環境構築方法についてまとめました。
Android Autoに対応したアプリをAndroid端末に入れて、車載デバイスと接続することで、車載デバイス側でアプリの画面を表示したり、操作することができます。
APIは以下の公式サイトで説明されています。
http://developer.android.com/training/auto/start/index.html
現状では、以下の2種類のアプリに対応しています。
オーディオ系アプリ・・・車の中でオーディオコンテンツを再生することができます。
メッセージ系アプリ・・・メールを受信するとメッセージを音声出力し、音声入力から返信メールを送信できます。
今回は、AndroidAuto向けのオーディオ系アプリを作成するまでの環境構築について、以下の流れで紹介します。
・AndroidManifestファイルの記載
・専用リソースファイルの記載
・サービスの実装
・シミュレーションアプリのインストール
・アプリの実行
AndroidManifestファイルの記載
ポイントは3つあります。targetSdkVersion
AndroidAutoに対応するアプリは、targetSdkVersionが21以上でなければいけません。MediaBrowserService継承サービス定義
以下のように定義します。 <service android:exported="true" android:name=".AndroidAutoMediaService">
<intent-filter>
<action android:name="android.media.browse.MediaBrowserService">
</action>
</intent-filter>
</service>
専用リソースファイルのメタデータ定義
以下のように定義します。 <meta-data
android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc" />
上記のように、『android:resource="@xml/automotive_app_desc"』とした場合は、以下の専用リソースファイルを用意する必要があります。
(プロジェクトフォルダ)\res\xml\automotive_app_desc.xml
専用リソースファイルの定義
AndroidManifestファイルで定義した専用リソースファイルには、以下のように記載します。"uses name="には、オーディオ系アプリの場合は"media"、メッセージ系アプリの場合は"notification"を設定します。今回の場合は前者です。
<automotiveapp>
<uses name="media"/>
</automotiveapp>
サービスの実装
AndroidManifestファイルで定義したMediaBrowserService継承サービスを実際に実装します。以下の2つのメソッドが実装必須ですが、今回は空のメソッドにしておきます。
public class AndroidAutoMediaService extends MediaBrowserService{
@Override
public BrowserRoot onGetRoot(String clientPackageName, int clientUid,
Bundle rootHints) {
return null;
}
@Override
public void onLoadChildren(String parentId, Result <List<MediaItem>> result) {
}
シミュレーションアプリのインストール
AndroidAuto向けアプリの動作をAndroid端末上で確認できる、シミュレーションアプリが提供されています。アプリはSDK Managerの「Android Auto API Simulators」からダウンロードできます。
ダウンロードが完了すると、以下のapkファイル2個が格納されます。
オーディオ系アプリ向けとメッセージ系アプリ向けに、2種類のシミュレーションアプリが用意されています。
(Android SDKフォルダ以下)\extras\google\simulators
media-browser-simulator.apk・・・オーディオ系アプリ
messaging-simulator.apk ・・・メッセージ系アプリ
今回はオーディオ系アプリを取り扱うので、media-browser-simulator.apkの方をインストールします。
それぞれのapkを起動すると、以下の画面が表示されます。
オーディオ系のシミュレーションアプリ
メッセージ系のシミュレーションアプリ
アプリの実行
作成したアプリをあらかじめインストールしておき、シミュレーションアプリの「Media Sim」を起動します。
メニューボタンを押すと、作成したアプリの名前が表示されれば成功です。
今回作成したアプリでは必要最低限の実装しか行っていないため、これ以上は動作できませんが、ちゃんと実装したアプリであれば、ここから動作が確認できるはずです。
次回からは、実際に動作するAndroid Autoアプリの開発方法について、説明していきます。
登録:
投稿 (Atom)





















