このページの本文へ

車とスマホがつながる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 MU937 超軽量 薄型ノートPC■Win11搭載 / MS Office H&B 2019 / FHD(1920x1080)/第七世代 Celeron/8GBメモリ/SSD 256GB/Webカメラ内蔵/13.3インチ
【整備済み品】 富士通 ノートパソコン LIFEBOOK MU937 超軽量 薄型ノートPC■Win11搭載 / MS Office H&B 2019 / FHD(1920x1080)/第七世代 Celeron/8GBメモリ/SSD 256GB/Webカメラ内蔵/13.3インチ
¥19,800
2
【Amazon.co.jp限定】 HP ノートパソコン 15-fd 15.6インチ インテル Core i5-1334U メモリ16GB SSD512GB Windows 11 Microsoft Office 2024搭載 カメラシャッター 指紋認証 薄型 Copilotキー搭載 ナチュラルシルバー (BJ0M4PA-AAAB)
【Amazon.co.jp限定】 HP ノートパソコン 15-fd 15.6インチ インテル Core i5-1334U メモリ16GB SSD512GB Windows 11 Microsoft Office 2024搭載 カメラシャッター 指紋認証 薄型 Copilotキー搭載 ナチュラルシルバー (BJ0M4PA-AAAB)
¥181,469
3
【整備済み品】富士通 ノートパソコン 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)
¥36,979
4
【整備済み品】中古 ノートパソコン NEC VersaPro VKT16/15.6型・第8世代Core i5-8250U(最大動作3.4GHz)/快適メモリ8GB/ 高速SSD 256GB/Win11 Pro/MS Office 2019付属/テンキー付, Webカメラ, USB3.0, HDMI, VGA, 有線LAN, WIFI内蔵, Bluetooth/ACアダプター付属/180日間保証
【整備済み品】中古 ノートパソコン NEC VersaPro VKT16/15.6型・第8世代Core i5-8250U(最大動作3.4GHz)/快適メモリ8GB/ 高速SSD 256GB/Win11 Pro/MS Office 2019付属/テンキー付, Webカメラ, USB3.0, HDMI, VGA, 有線LAN, WIFI内蔵, Bluetooth/ACアダプター付属/180日間保証
¥26,880
5
Lenovo ノートパソコン IdeaPad Slim 5 Light 13.3インチ AMD Ryzen™ 5 7535HS メモリ16GB SSD512GB バッテリー駆動22.8時間 重量1.15kg クラウドグレー 83J20009JP
Lenovo ノートパソコン IdeaPad Slim 5 Light 13.3インチ AMD Ryzen™ 5 7535HS メモリ16GB SSD512GB バッテリー駆動22.8時間 重量1.15kg クラウドグレー 83J20009JP
¥129,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
¥1,880
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
【Amazon.co.jp限定】バッファロー microSD 32GB 100MB/s UHS-1 U1 microSDHC【 Nintendo Switch 対応 】V10 A1 IPX7 Full HD RMSD-032U11HA/N
【Amazon.co.jp限定】バッファロー microSD 32GB 100MB/s UHS-1 U1 microSDHC【 Nintendo Switch 対応 】V10 A1 IPX7 Full HD RMSD-032U11HA/N
¥980
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
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
6
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
¥980
7
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
¥5,555
8
【Amazon.co.jp限定】 ロジクール 静音 ワイヤレス トラックボール マウス M575SPd Bluetooth Logibolt 無線 windows mac iPad OS Chrome トラックボールマウス ブラック M575 M575SP 国内正規品 ※Amazon.co.jp限定 壁紙ダウンロード付き
【Amazon.co.jp限定】 ロジクール 静音 ワイヤレス トラックボール マウス M575SPd Bluetooth Logibolt 無線 windows mac iPad OS Chrome トラックボールマウス ブラック M575 M575SP 国内正規品 ※Amazon.co.jp限定 壁紙ダウンロード付き
¥5,280
9
バッファロー SDカード 128GB 100MB/s UHS-1 スピードクラス1 VideoSpeedClass10 IPX7 Full HD データ復旧サービス対応 RSDC-128U11HA/N
バッファロー SDカード 128GB 100MB/s UHS-1 スピードクラス1 VideoSpeedClass10 IPX7 Full HD データ復旧サービス対応 RSDC-128U11HA/N
¥1,980
10
バッファロー マウス 無線 ワイヤレス 5ボタン 【戻る/進むボタン搭載】 小型 軽量 節電モデル 最大584日使用可能 BlueLED ブラック BSMBW315BK
バッファロー マウス 無線 ワイヤレス 5ボタン 【戻る/進むボタン搭載】 小型 軽量 節電モデル 最大584日使用可能 BlueLED ブラック BSMBW315BK
¥1,040

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

デジタル用語辞典

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