カスタマーディスプレイ(4インチ)を使う
stera terminal standard(ステラターミナルスタンダード)にはメインディスプレイとは別に、お客さま側へ情報を表示するための4インチのカスタマーディスプレイが搭載されています。
stera terminal unit(ステラターミナルユニット)にはカスタマーディスプレイは搭載されておらず1画面となりますので、本記事の内容は適用外です。
stera terminal unit(ステラターミナルユニット)で該当の機能を利用した際は受信エラー(0x00FF0002)が返却されます。
カスタマーディスプレイにはテキスト、画像の表示ができます。
また、ディスプレイはタッチパネルになっており、お客さまへタッチ画面を提示することができます。
カスタマーディスプレイの制御はすべてPaymentApi.jar経由で行います。
stera termina unit(ステラターミナルユニット)はPaymentApi2.jar
カスタマーディスプレイには12種類の画面パターンが用意されており、テキストや画像を表示することができます。
アプリケーションごとに画像は最大20枚、合計サイズは300KByte(1画像あたり最大30KByte)まで登録できます。
ソフトウェアバージョンが D40.10.179以降の場合、合計サイズは1MByte(1画像あたり最大100KByte)になります。
画面パターンにより表示できるサイズ(文字数、行数)が異なることに注意してください。
表示する内容はXMLで記述します。
12パターンの表示レイアウトについて
カスタマーディスプレイを使用する際は、12種類の画面レイアウトの中から1種類を使用することができます。
12種類の画面パターンは下記になります。
画面パターンごとに画面フォーマットが決まっており、画面パターンごとの表示指定可能エリア(下表「●」に該当)に表示したいイメージ、またはテキストをユーザ側で指定することができます。
<注意>
DisplayFormat01
カスタマーディスプレイで指定可能なタグは下記のとおりです。
■カスタマーディスプレイXMLタグ
表の詳細については横スクロールさせて確認することができます。
タグ名称 |
内容 |
---|---|
customerDisplayApi |
カスタマーディスプレイ表示の開始と終了を示すタグ 下記属性を必ず設定してください。 ・id属性 呼び出し元アプリケーションのパッケージ名を指定します。 許可されたアプリケーションのみカスタマーディスプレイを使用できます。
customerDisplayApi以下には必ず下記要素を1つ以上指定してください。 ・screenPattern要素 ・headerArea要素 ・imageArea要素 ・messageArea要素 ・buttonTop要素 |
screenPattern |
画面パターンの指定をするタグ customerDisplayApiの要素として指定します。 表DisplayFormat01に書かれている表示パターンのいずれかを指定します。 |
headerArea |
ヘッダエリアの表示内容を示すタグ customerDisplayApiの要素として指定します。 表DisplayFormat01でヘッダに●がついている表示パターンで使用します。 headerArea以下にheaderAreaNumber要素、customerString要素を必ず指定してください。 |
headerAreaNumber |
ヘッダエリア番号を指定するタグ headerAreaの要素として指定します。 選択した表示パターンのヘッダエリア1~3を指定します。 同headerArea内にcustomerString要素を指定してください。 |
customerString |
表示文字列を指定するタグ headerArea/messageAreaの要素として指定します。 記載できる最大文字数は下記のとおりです。(すべて全角文字数)
|
imageArea |
イメージエリアの表示内容(画像)を示すタグ customerDisplayApiの要素として指定します。 表DisplayFormat01でイメージエリアに●がついている表示パターンで使用できます。 imageArea以下にimageAreaNumber要素、imageNumber要素を必ず指定してください。 |
imageAreaNumber |
ヘッダエリア番号を指定するタグ imageAreaの要素として指定します。 imageAreaNumberは“1”固定で指定します。 同imageArea内にimageNumberを指定してください。 |
imageNumber |
表示する画像の登録番号を指定するタグ imageArea/buttonTopの要素として指定します。 事前にsetCustomerImageメソッドで画像の登録をしてください。 指定できる画像は下記のとおりです。 ・imageArea内:表示用 ・buttonTop内:ボタン用 |
messageArea |
メッセージエリアの表示内容(メッセージ)を示すタグ customerDisplayApiの要素として指定します。 表DisplayFormat01でメッセージエリアに●がついている表示パターンで使用できます。 messageArea以下にmessageAreaNumber要素、customerString要素を必ず指定してください。 |
massageAreaNumber |
メッセージエリア番号を指定するタグ messageAreaの要素として指定します。 選択した表示パターンのメッセージエリア1~5を指定します。 同messageArea内にcustomerString要素を指定してください。 |
buttonTop |
ボタントップの表示内容を示すタグ customerDisplayApiの要素として指定します。 表DisplayFormat01でボタンエリアに●がついている表示パターンで使用できます。 buttonTop以下にbuttonNumber要素、imageNumber要素を必ず指定してください。 |
buttonNumber |
ボタントップ番号を指定するタグ buttonTopの要素として指定します。 選択した表示パターンのボタントップ番号1~4を指定します。 同buttonTop内にimageNumber要素を指定してください。 |
画面パターン1と2のXMLと実際に表示されるカスタマーディスプレイの画面を以下に記載します。
■画面パターン1
XML
コードは横スクロールさせて確認することができます。
<?xml version="1.0" encoding="UTF-8"?> <customerDisplayApi id="displayopening"> <screenPattern>1</screenPattern> <imageArea> <imageAreaNumber>1</imageAreaNumber> <imageNumber>1</imageNumber> </imageArea> </customerDisplayApi>
カスタマーディスプレイ画面
■画面パターン2
XML
コードは横スクロールさせて確認することができます。
<?xml version="1.0" encoding="UTF-8"?> <customerDisplayApi id="displaycoupon"> <screenPattern>2</screenPattern> <headerArea> <headerAreaNumber>1</headerAreaNumber> <customerString>Header1</customerString> </headerArea> <headerArea> <headerAreaNumber>2</headerAreaNumber> <customerString>Header2</customerString> </headerArea> <headerArea> <headerAreaNumber>3</headerAreaNumber> <customerString>Header3</customerString> </headerArea> <imageArea> <imageAreaNumber>1</imageAreaNumber> <imageNumber>2</imageNumber> </imageArea> <messageArea> <messageAreaNumber>1</messageAreaNumber> <customerString>Message1</customerString> </messageArea> <buttonTop> <buttonNumber>1</buttonNumber> <imageNumber>4</imageNumber> </buttonTop> </customerDisplayApi>
カスタマーディスプレイ画面
画像サイズがイメージエリアのサイズより大きいため、一部が無視されています。
背景の画像は画面パターン1の例と同じものを使用しています。
カスタマーディスプレイを利用するためには、下図の手続きを実施する必要があります。
実際のコードは下記のとおりです。
コードは横スクロールさせて確認することができます。
// アプリケーションタグ(ユニークなアプリケーション名。事前に申請が必要) private static final String TAG = "com.panasonic.sample.customerdisplay.application" // 画像ファイル private static final String FILE_PATH_DISPLAY_IMAGE = "/sdcard/SampleDisplayImage.png"; private static final String FILE_PATH_BUTTON_YES_IMAGE = "/sdcard/SampleButtonYesImage.png"; private static final String FILE_PATH_BUTTON_CANCEL_IMAGE = "/sdcard/SampleButtonCancelImage.png"; // イベントハンドラ private ICustomerDisplayListener mCustomerDisplayListener = new ICustomerDisplayListener.Stub() { @Override public void onOpenComplete(boolean result) { // カスタマーディスプレイ接続完了時に呼び出される } @Override public void onDetectButton(int button) { // カスタマーディスプレイ内のボタンタッチが検出された時に呼び出される } }; // カスタマーディスプレイの初期化処理 private void initializeSample() { try { mCustomerDisplay.registerCustomerDisplayListeners(TAG, mCustomerDisplayListener); mCustomerDisplay.openCustomerDisplay(TAG); // この後、onOpenCompleteが呼び出されるのを待つこと } catch (ArgumentException| FatalException e) { e.printStackTrace(); } } // カスタマーディスプレイ表示内容のセットアップ private void setupSample() { // 画像の事前登録 // ID指定した画像はXML上から呼び出す try { mCustomerDisplay.setCustomerImage(TAG, ICustomerDisplay.IMAGE_KIND_DISPLAY, 25, FILE_PATH_DISPLAY_IMAGE); // ID=25に画像を指定 mCustomerDisplay.setCustomerImage(TAG, ICustomerDisplay.IMAGE_KIND_BUTTON, 10, FILE_PATH_BUTTON_YES_IMAGE); // ID=10にボタンイメージを指定 mCustomerDisplay.setCustomerImage(TAG, ICustomerDisplay.IMAGE_KIND_BUTTON, 11, FILE_PATH_BUTTON_CANCEL_IMAGE); // ID=11にボタンイメージを指定 } catch (ArgumentException| FatalException e) { e.printStackTrace(); } } // private void displaySample() { // カスタマーディスプレイ表示内容XMLの作成 StringBuilder sb = new StringBuilder(); sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); sb.append(" <customerDisplayApi id=\"xxxxxxxxx\">"); sb.append(" <screenPattern>3</screenPattern>"); sb.append(" <headerArea>"); sb.append(" <headerAreaNumber>1</headerAreaNumber>"); sb.append(" <customerString>Revolving</customerString>"); sb.append(" </headerArea>"); sb.append(" <headerArea>"); sb.append(" <headerAreaNumber>2</headerAreaNumber>"); sb.append(" <customerString>Credit</customerString>"); sb.append(" </headerArea>"); sb.append(" <headerArea>"); sb.append(" <headerAreaNumber>3</headerAreaNumber>"); sb.append(" <customerString>$123.45</customerString>"); sb.append(" </headerArea>"); sb.append(" <imageArea>"); sb.append(" <imageAreaNumber>1</imageAreaNumber>"); sb.append(" <imageNumber>25</imageNumber>"); // ID=25の画像を指定 sb.append(" </imageArea>"); sb.append(" <messageArea>"); sb.append(" <messageAreaNumber>1</messageAreaNumber>"); sb.append(" <customerString>PRESS YES TO ACCEPT</customerString>"); sb.append(" </messageArea>"); sb.append(" <buttonTop>"); sb.append(" <buttonNumber>1</buttonNumber>"); sb.append(" <imageNumber>10</imageNumber>"); // ID=10のボタンを指定 sb.append(" </buttonTop>"); sb.append(" <buttonTop>"); sb.append(" <buttonNumber>2</buttonNumber>"); sb.append(" <imageNumber>11</imageNumber>"); // ID=11のボタンを指定 sb.append(" </buttonTop>"); sb.append("</customerDisplayApi>"); // カスタマーディスプレイに表示する try { mCustomerDisplay.doDisplayScreen(TAG, sb.toString()); } catch (ArgumentException| FatalException e) { e.printStackTrace(); } } // カスタマーディスプレイの終了処理 private void terminateSample() { try { mCustomerDisplay.stopDetecting(TAG); mCustomerDisplay.closeCustomerDisplay(TAG, false); mCustomerDisplay.unregisterCustomerDisplayListeners(TAG); } catch (ArgumentException| FatalException e) { e.printStackTrace(); } }
カスタマーディスプレイのタッチを読み取るためには、ICustomerDisplayListenerのonDetectButton(int button)メソッドにタッチ時の処理を記載します。
下記コードではボタン1が押下されたときにアラート表示を行っています。
コードは横スクロールさせて確認することができます。
@Override public void onDetectButton(int button) { // カスタマーディスプレイ内のボタンタッチが検出された時に呼び出される // 引数buttonは事前に設定した画像No if(button == 1){ // ボタンNo.1がタップされたら、アラートを表示する final AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); dialog.setMessage(mContext.getString(R.string.errorShutDown)) .setPositiveButton("OK", null) .show(); } }