このページの本文へ

車とスマホがつながるSDLの世界 第7回

メニュー画面を表示してみよう

SDL対応アプリ開発環境の構築その3~Android版のSDLのAPIを使いこなす

2019年01月12日 11時00分更新

文● 柴田文彦 編集●アスキー編集部

提供: トヨタ自動車株式会社

  • この記事をはてなブックマークに追加
  • 本文印刷

ディスプレイのテンプレートを選択する

 はじめに、車載機側のディスプレイの基本的なレイアウトを決めるテンプレートを変更してみよう。このテンプレートは、車載機側に実装されているものなので、アプリ単独ではどのようなテンプレートが利用可能なのかさえ分からない。そこでアプリは、車載機に接続すると、どんなテンプレートが利用可能なのかを通信によって尋ね、その答えに含まれているものの中から1つを選んで指定することができる。

 ただし、今回はその問い合わせのプロセスを省き、おそらくほとんどの車載機に搭載されている(もちろんエミュレーターもサポートしている)シンプルなものを指定することにしよう。それは、「NON_MEDIA」と呼ばれるもので、アプリの画像1つと、最大4行の任意のテキスト、そして4つまでのソフトボタンを1画面に配置できるようになっている。

 テンプレートの選択に限らず、SDLアプリ側から車載機側へのリクエストは、基本的に次の3つのステップによって実現する。

1. リクエストの作成
2. レスポンスに対するリスナーの設定
3. RPCによるリクエストの送信

 1のリクエストの作成は、リクエストの種類ごとにリクエストオブジェクトを作成し、そこにパラメータを設定するという2段階の処理となる。このディスプレイレイアウトの設定の場合のコードは、次のようになる。

SetDisplayLayout setDisplayLayoutRequest = new SetDisplayLayout();
setDisplayLayoutRequest.setDisplayLayout(PredefinedLayout.NON_MEDIA.toString());

 作成するオブジェクトは、SetDisplayLayoutクラスで、そのsetDsiaplayLayoutメソッドを使って、PredefinedLayoutの中の「NON_MEDIA」という名前のテンプレートを指定している。

 次に2のレスポンスに対するリスナーの設定だが、これも1で作成したオブジェクトのsetOnRPCResponseListenerメソッドを使って設定する。これは、次に示すように、onReseponseという応答に対するイベント処理のメソッドを記述する形となっている。

setDisplayLayoutRequest.setOnRPCResponseListener(new OnRPCResponseListener() {
    @Override
    public void onResponse(int correlationId, RPCResponse response) {
        if(((SetDisplayLayoutResponse) response).getSuccess()){
            Log.i("SdlService", "Display layout set successfully.");
        }else{
            Log.i("SdlService", "Display layout request rejected.");
        }
    }
});

 この例では、レスポンスとしては特にアプリの動作に影響することは何も実行していない。リクエストが成功した場合には「Display layout set successfully.」、失敗した場合には「Display layout request rejected.」というメッセージをログに書き出しているだけだ。実際のアプリでは、このテンプレートの設定が成功したことを前提に実行する必要のあるコードがあれば、ここに記述すれば良いだろう。

 そして3のリクエストの送信には、すでにSdlMangerクラスから別途作成してあるsdlMangerオブジェクトのsendRPCメソッドを使う。

sdlManager.sendRPC(setDisplayLayoutRequest);

 ちなみに、ここに出てくるsdlManagerオブジェクトは、SdlServiceの先頭に近い部分で、以下のようにフィールドとして定義されている。

private SdlManager sdlManager = null;

 さて、残る問題は、このテンプレート設定のコードをSdlService内のどこに置けば良いかということだ。

 これには色々な可能性が考えられるが、アプリと車載機の通信が確立してからでなければうまくいかないのは確かだ。SdlServiceの中には、アプリから車載機の状態をチェックしている部分がある。車載機の状態は、アプリとの通信が確立してから何段階かのレベルで変化するが、最終的にはフル稼働状態(HMILevel.HMI_FULL)になる。アプリが起動してから、最初にこの状態になった時点で、3つのメソッドを続けて呼び出している部分がある。その3つのメソッド呼び出しは、以下のようになっている。

sendCommands();
performWelcomeSpeak();
performWelcomeShow();

 最初に呼び出されるsendCommands()の中では、1つだけメニューを設定している。次のperformWelcomeSpeak()では、車載機に対して「Welcome to Hello S D L」という文を音声で読み上げるようなコマンドを発行する。そして、performWelcomeShow()では、車載機側のアプリ画面に、「Hello Sdl」というアプリ名、「Welcome to HelloSDL」というメッセージをテキストとして表示し、さらにSDLロゴのグラフィックも表示している。

 これらの動作を考慮すると、ここではメッセージの表示の前のタイミングでテンプレートを選択しておくのが良さそうだ。そこで、performWelcomeShow()メソッドの中に、上記のテンプレート設定コードを追加することにしよう。このメソッドの先頭部分に上のコードを追加すればいい。まずは、最初のリクエスト作成の2行だ(図2)。

図2:最初からSdlSeervice.javaに含まれるperformWelcomeShow()メソッドの中に、車載機のUIのテンプレートを設定するためのコードを加えようとするとエラーが発生する

 すると、当然と言えば当然ながら、さっそくエラーが発生している。これらはSetDisplayLayoutクラスや、その中のメソッド、既定のテンプレートを定義しているPredefinedLayoutなどが未知だというもの。

 これらのエラーは、表示されるガイドに従って自動インポート機能によって該当するクラスやタイプをインポートすれば簡単に解決できる。この自動インポート機能は、今後も新たなクラスやタイプを利用するコードを追加するたびに活躍することになる。今後はいちいち示さないので、適宜活用してコードを入力していただきたい。

 続いて、同様にして、リクエストに対するレスポンスを受ける部分と、リクエストを送信するコードも記述しよう。その結果、performWelcomeShow()メソッドの先頭部分はこの図のようになる(図3)。

図3:performWelcomeShow()メソッドの先頭部分に、空白を除いて13行のコードを追加して、車載機ディスプレイのテンプレートを指定する

 ここまでの成果を確認するために、前回に示したのと同じ手順で、車載機エミュレーターを起動し、アプリを実行してみよう。最初のアプリ一覧画面でアプリアイコンをクリックすると、「Hello Sdl」というタイトルのアプリ画面に切り替わる(図4)。

図4:「NON_MEDIA」のテンプレートを指定したことで、車載機ディスプレイのレイアウトは、デフォルトとは異なるものとなった

 アプリ名、ウェルカムメッセージ、アプリのロゴと、表示している情報は前回に示したデフォルトのものと変わらないが、レイアウトが変化していることに気付かれるはずだ。これが「NON_MEDIA」にテンプレートによるレイアウトだ。さらにユーザーインターフェースをカスタマイズするためのプログラミングを続けて行こう。

カテゴリートップへ

本記事はアフィリエイトプログラムによる収益を得ている場合があります

この連載の記事
1
【整備済み品】富士通 ノートパソコン LIFEBOOK U9310 13.3型FHD(1920x1080) 超軽薄 ノートPC/第10世代 Core i5-10310U@1.7GHz/ 8GB メモリ/高速ストレージ SSD/Webカメラ/WIFI/Type-C/HDMI/win11&MS Office 2019 搭載 ビジネス 在宅勤務向け パソコン (メモリ:8GB/SSD:256GB)
【整備済み品】富士通 ノートパソコン LIFEBOOK U9310 13.3型FHD(1920x1080) 超軽薄 ノートPC/第10世代 Core i5-10310U@1.7GHz/ 8GB メモリ/高速ストレージ SSD/Webカメラ/WIFI/Type-C/HDMI/win11&MS Office 2019 搭載 ビジネス 在宅勤務向け パソコン (メモリ:8GB/SSD:256GB)
¥35,130
2
Apple 2026 MacBook Air M5チップ搭載13インチノートブック:AIとApple Intelligence、13.6インチLiquid Retinaディスプレイ、16GBユニファイドメモリ、512GB SSDストレージ、12MPセンターフレームカメラ、日本語キーボード、Touch ID - ミッドナイト
Apple 2026 MacBook Air M5チップ搭載13インチノートブック:AIとApple Intelligence、13.6インチLiquid Retinaディスプレイ、16GBユニファイドメモリ、512GB SSDストレージ、12MPセンターフレームカメラ、日本語キーボード、Touch ID - ミッドナイト
¥177,333
3
Apple 2026 MacBook Neo A18 Proチップ搭載13インチノートブック:AIとApple Intelligenceのために設計、Liquid Retinaディスプレイ、8GBユニファイドメモリ、256GB SSDストレージ、1080p FaceTime HDカメラ - シトラス
Apple 2026 MacBook Neo A18 Proチップ搭載13インチノートブック:AIとApple Intelligenceのために設計、Liquid Retinaディスプレイ、8GBユニファイドメモリ、256GB SSDストレージ、1080p FaceTime HDカメラ - シトラス
¥95,768
4
ESBOOKノートパソコン 【MS Office 2024搭載&Windows 11 Pro】14インチIPS液晶/1920×1080FHDディスプレイ カメラ付き/薄型PCノート高性能CPU/初期設定不要/8Gメモリ/無線LAN/大容量SSD/初心者向け・パソコンノート/日本語キーボードフィルム付き/ワイヤレスマウス付き(256G SSD, ローズゴールド)
ESBOOKノートパソコン 【MS Office 2024搭載&Windows 11 Pro】14インチIPS液晶/1920×1080FHDディスプレイ カメラ付き/薄型PCノート高性能CPU/初期設定不要/8Gメモリ/無線LAN/大容量SSD/初心者向け・パソコンノート/日本語キーボードフィルム付き/ワイヤレスマウス付き(256G SSD, ローズゴールド)
¥38,999
5
【Amazon.co.jp限定】ASUS ノートパソコン Vivobook 15 M1502NAQ 15.6インチ AMD Ryzen 7 170 メモリ16GB SSD 512GB Windows 11 重量1.7kg Wi-Fi 6E クワイエットブルー M1502NAQ-R7165BUW
【Amazon.co.jp限定】ASUS ノートパソコン Vivobook 15 M1502NAQ 15.6インチ AMD Ryzen 7 170 メモリ16GB SSD 512GB Windows 11 重量1.7kg Wi-Fi 6E クワイエットブルー M1502NAQ-R7165BUW
¥98,800

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

ASCII倶楽部

注目ニュース

  • 角川アスキー総合研究所

プレミアム実機レビュー

ピックアップ
1
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
¥2,386
2
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
¥1,890
3
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
¥1,080
4
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
¥740
5
UGREEN USB Type Cケーブル PD対応 100W/5A 超急速充電 USB C ナイロン編み 断線防止 iphone17/16/15シリーズ/iPad/MacBook Pro/Galaxy S24/Matebook/iPad/Xperia等USB-C各種対応(1m, ブラック)
UGREEN USB Type Cケーブル PD対応 100W/5A 超急速充電 USB C ナイロン編み 断線防止 iphone17/16/15シリーズ/iPad/MacBook Pro/Galaxy S24/Matebook/iPad/Xperia等USB-C各種対応(1m, ブラック)
¥743
6
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
¥990
7
NIMASO ガラスフィルム iPad 第11世代(A16) 2025用/iPad 10.9インチ 第10世代 2022用 衝撃吸収 強化 ガラス 保護フィルム 指紋防止 ガイド枠付き NTB22I574
NIMASO ガラスフィルム iPad 第11世代(A16) 2025用/iPad 10.9インチ 第10世代 2022用 衝撃吸収 強化 ガラス 保護フィルム 指紋防止 ガイド枠付き NTB22I574
¥1,359
8
KIOXIA(キオクシア)【日本製】SDカード 128GB SDXC UHS-I Class10 読出速度100MB/s 国内正規品 メーカー保証5年 KLNEA128G
KIOXIA(キオクシア)【日本製】SDカード 128GB SDXC UHS-I Class10 読出速度100MB/s 国内正規品 メーカー保証5年 KLNEA128G
¥2,424
9
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
¥1,690
10
JAMJAKE iPad用ペンシル アップルペンシル代用ペン 2018年~2026年 iPad対応 タッチペン 超高感度 極細 スタイラスペン Type-C急速充電 傾き感知/磁気吸着/誤作動防止機能対応 軽量 耐摩 学生 子供 筆記 絵を描く デザイン用 ドローイング用
JAMJAKE iPad用ペンシル アップルペンシル代用ペン 2018年~2026年 iPad対応 タッチペン 超高感度 極細 スタイラスペン Type-C急速充電 傾き感知/磁気吸着/誤作動防止機能対応 軽量 耐摩 学生 子供 筆記 絵を描く デザイン用 ドローイング用
¥1,880

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

デジタル用語辞典

ASCII.jpメール デジタルMac/iPodマガジン