ソフトボタンの操作に応答してアラートを表示する
以上のプログラムによって配置した2つのソフトボタンのうち、1つめはクリック(タップ)するたびにステートが切り替わるので、アプリの動作モードをすばやく切り替えるためのボタンなどとして利用できるだろう。
それに対して、もう1つのボタンのイベントリスナーはnullのままで、まだ何も動作を割り当てていなかった。ここでは、そのボタンをクリックすることでアラートを表示するプログラムを追加することにしよう。その場合のアラートは、もちろんスマホ側ではなく、車載機側の画面に表示される。
アラートを表示するためのAPIは、これまで示したものに比べてもかなりシンプルで、簡単に利用できる。基本的には、まずAlertクラスのオブジェクトを作成し、そのオブジェクトに表示するテキスト、アラートを閉じる条件、ボタンなどをプロパティとして付加する。その後SdlManagerを使って、RPC経由でアラートオブジェクトを車載機に転送するだけでいい。
アラートには最大3行のテキストを表示できるが、ここでは2行のテキストを設定し、5秒(5000ミリ秒)後に自動的に閉じるようにする。以下にこのアラートを表示するためのコードを示す。
Alert alert = new Alert();
alert.setAlertText1("Softbutton Pressed!");
alert.setAlertText2("Wait for 5 seconds to dismiss.");
alert.setDuration(5000);
sdlManager.sendRPC(alert);
SDLの車載機のアラートは、運転中に注視したり、ボタンを探して操作したりする必要がないよう、このように時間が経ったら自動的に閉じるような設定も有効だろう。
このコードは、上で作った2番めのソフトボタンオブジェクトのイベントリスナーの中に書く。ソフトボタンオブジェクトを作成している部分を含めて、イベントリスナーのコードを以下に示す。
SoftButtonObject button2 = new SoftButtonObject("button2", button2States, button2S1.getName(), null);
button2.setOnEventListener(new SoftButtonObject.OnEventListener() {
@Override
public void onPress(SoftButtonObject softButtonObject, OnButtonPress onButtonPress) {
Alert alert = new Alert();
alert.setAlertText1("Softbutton Pressed!");
alert.setAlertText2("Wait for 5 seconds to dismiss.");
alert.setDuration(5000);
sdlManager.sendRPC(alert);
}
@Override
public void onEvent(SoftButtonObject softButtonObject, OnButtonEvent onButtonEvent) {}
});
この例でも、動作としては不要なonEvent()メソッドを記述しているが、上で述べたように中身が空でも、このメソッドを記述しておく必要がある。
以上のコードを加えたアプリを実行して、車載機エミュレーター画面の「Button 2」というラベルのボタンをクリックしてみよう。すると、「Softbutton Pressed!」というメッセージを表示するアラートが表示される(図10)。
そしてこのアラートは、「Wait for 5 seconds to dismiss.」と表示されている通り、何もしなくても5秒後には自動的に閉じられる。
メニュー画面にメニューコマンドを追加する
今回ベースとして利用しているサンプルプロジェクトには、車載機画面右上の「≡」マークのメニューボタン(いわゆるハンバーガーメニュー)を操作すると表示されるメニュー画面のコマンドも1つだけ含まれている。もちろんこのメニュー画面には複数のメニューコマンドを表示し、ユーザーに選択してもらうことができる。
ここでは、最初からある「Test Command」に加えて、サブメニューを持たない単独のメニューコマンドと、サブメニューを持ったメニュー項目をそれぞれ1つずつ、さらにそのサブメニューとして表示する2つのメニューコマンドを追加する例を示す。
まずは、サブメニューを持たない単純なメニューコマンド1つを追加してみよう。車載機上のメニューを作成するには、まずメニューコマンドの名前やIDを含むメニュー項目をMenuParamsクラスのオブジェクトとして作成する。必要なプロパティを設定したら、そのオブジェクトを、こんどはAddCommandクラスのオブジェクトにセットする。その後、SdlManagerを使って、そのAddCommandクラスのオブジェクトRPCで送信すればいい。
このような手順によって、「Menu Item without Submenu」という名前のコマンドをメニュー画面に追加するコードは以下のようになる。
MenuParams menu1 = new MenuParams();
menu1.setParentID(0);
menu1.setPosition(1);
menu1.setMenuName("Menu Item without Submenu");
AddCommand addCmd = new AddCommand();
addCmd.setCmdID(11);
addCmd.setMenuParams(menu1);
sdlManager.sendRPC(addCmd);
ここでは、setParentID()メソッドによって親のIDとして0を指定している。これは他のメニューのサブメニューとしてではなく、ルートのメニュー画面に直接表示するものであることを示している。このコードは、上で記述したソフトボタンを追加するためのコードの後ろに続けて書けばいい。念のために、その位置をスクリーンショットで確認しておこう(図11)。
このプログラムを動かして結果を確認してみよう。アプリ画面が表示されたら、右上の「≡」のようなボタンをクリックすると、2つのメニューコマンドを持ったメニュー画面が表示される(図12)。
元からあった「Test Command」の下に、「Menu Item without Submenu」というメニューコマンドが追加された。このメニュー画面の表示は、右端に「>」のようなマークが表示されていて、サブメニューがありそうにも見える紛らわしい表示となっているが、これは単にメニューコマンドを表しているマークだと考えられる。

この連載の記事
-
第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の世界 - この連載の一覧へ