サブメニュー付きメニューを追加する
次に、サブニュー付きの項目を追加してみよう。その方法は、今見た単独のメニューコマンドを追加するものとは、まったくと言ってよいほど異なっている。同じなのは、項目を追加するコマンドのオブジェクトをSdlManagerを使ってRPC経由で車載機に送信するところくらいだ。
この場合、まずAddSubMenuクラスのオブジェクトを作って、そこにメニュー項目の名前やIDを設定する。その後、さらにちゃんと設定できたかどうかを判断するレスポンスリスナーを付加し、その上で、そのAddSubMenuオブジェクトをSdlManagerを使って車載機に転送する。ということは、このAddSubMenuオブジェクトは、上の単独メニューの場合のMenuParamsとAddCommandを合わせたような機能を持っていると考えられる。
中身のサブメニューコマンドは、レスポンスリスナーの中で追加することになる。その部分のコードは、上の単独メニューの場合と同様だ。ただし、setParentID()メソッドで指定する親のIDには、AddSubMenuオブジェクトに設定したIDを指定する。それによって、そのメニューコマンドがどのメニュー項目に属するかを示す。言葉で説明すると煩雑なので、ちょっと長くなるが、実際のコードを見てみよう。
AddSubMenu addMenu2 = new AddSubMenu();
addMenu2.setPosition(2);
addMenu2.setMenuID(12);
addMenu2.setMenuName("Menu Item with Submenu");
addMenu2.setOnRPCResponseListener(new OnRPCResponseListener() {
@Override
public void onResponse(int correlationId, RPCResponse response) {
if(((AddSubMenuResponse) response).getSuccess()){
MenuParams menu21 = new MenuParams();
menu21.setParentID(12);
menu21.setPosition(0);
menu21.setMenuName("Submenu Item 1");
AddCommand addCmd21 = new AddCommand();
addCmd21.setCmdID(21);
addCmd21.setMenuParams(menu21);
sdlManager.sendRPC(addCmd21);
MenuParams menu22 = new MenuParams();
menu22.setParentID(12);
menu22.setPosition(1);
menu22.setMenuName("Submenu Item 2");
AddCommand addCmd22 = new AddCommand();
addCmd22.setCmdID(22);
addCmd22.setMenuParams(menu22);
sdlManager.sendRPC(addCmd22);
}
}
});
sdlManager.sendRPC(addMenu2);
このコードは、上の単独メニューのコードの下に追加すればいいだろう。さっそく実行結果を確認しよう。まず、アプリ画面から右上の「≡」ボタンをクリックしてメニュー画面を表示する(図13)。
新たに「Menu Item with Submenu」という項目が追加され、メニュー項目は全部で3つになった。そこで、その新たに追加されたサブメニュー付きの項目をクリックすると、今度は2つの項目を持ったサブメニューが表示される(図14)。
これらは、上のコードのレスポンスリスナーの中で設定したサブメニューを持たないメニューコマンドだ。
なお、今回は、ユーザーがメニューコマンドを選択した際に、それにどうやって応答するのかという部分は取り上げない。それについては、最初から設定されているメニューコマンドについてのコードが参考になる(図15)。
このコードは、SdlService.javaの中のstartProxy()メソッドで、SdlManagerListenerクラスのオブジェクトを作成している部分に記述されている。そこで、OnRPCNotificationListenerを定義する際に、メニューコマンドに対するレスポンスを実装している。そこでは、メニューコマンドのIDを調べて、それぞれ対応する処理を記述できるようになっている。この最初からあるメニューコマンドのIDは「TEST_COMMAND_ID」であり、それを選択すればshowText()メソッドを呼び出すことになる。
以上、駆け足ながら、Androidのサンプルプロジェクトをベースとして、そこにテキストメッセージの表示、ソフトボタンの配置、ボタン操作に対するアラートを表示、メニューの追加といった機能を実現する方法を解説した。オリジナルのSDL対応Androidアプリの開発の参考にしていただきたい。
(提供:トヨタ自動車株式会社)
この連載の記事
-
第10回
スマホ
未来の車とバイクを楽しく安全にするアイデアが集結 -
第9回
sponsored
車両情報+ニュース読み上げアプリを作ってみた! -
第8回
sponsored
SDL対応アプリ開発環境の構築その4~白紙のiOSプロジェクトから作るSDLアプリ -
第6回
sponsored
SDL対応アプリ開発環境の構築その2~アプリ開発環境を整える -
第5回
sponsored
クルマがしゃべる未来って? ロボホンとクルマをつないでみた -
第4回
sponsored
SDL対応アプリ開発環境の構築その1~車載機エミュレーターを作成する -
第3回
sponsored
トヨタ・スズキ・LINEのキーマンが語る、SDLとスマホが作る車・バイクの未来 -
第2回
sponsored
スマホアプリをカーナビで動かすと、こんな世界が待っている! -
第1回
sponsored
車・バイクとスマホを連携させるSDL規格の基礎知識 -
sponsored
車とスマホがつながるSDLの世界 - この連載の一覧へ