# SDKの使い方 ## SDKの追加 「app」->「libs」->「右クリック」->「Open in Finder」を選択します 。 ![1750131897461](media/1750131897461.png)   ダウンロードした「ASR-A60D-SDK.aar」を選択します。 プロジェクトの「libs」の下に「ASR-A60D-SDK.aar」が表示されます。 ![1750136667644](media/1750136667644.png) ![1750136730924](media/1750136730924.png) 「build.gradle」をダブルクリックします 。 ![1750136826041](media/1750136826041.png) 依存関係にライブラリをインポートします。「Sync Now」をクリックし、同期します 。 ![1750136951960](media/1750136951960.png) 同期に成功すると下図のような表示になり 、SDKの追加が完了します。 ![1750137278064](media/1750137278064.png) --- ## SDKの使用 ### SDKのインポート 使用するクラスで、SDKの機能を利用するために import を宣言してください。 必要なクラスやインターフェースは、用途に応じて選択して使用します。 ```java import jp.co.asterisk.asreader.a60d.sdk.AsReaderSDK; import jp.co.asterisk.asreader.a60d.sdk.device.connection.ConnectionType; import jp.co.asterisk.asreader.a60d.sdk.device.connection.PermissionState; import jp.co.asterisk.asreader.a60d.sdk.event.DeviceManagerCallback; import jp.co.asterisk.asreader.a60d.sdk.event.ASKManagerCallBack; import jp.co.asterisk.asreader.a60d.sdk.event.BLEScanCallback; ``` --- ### AsReaderSDKオブジェクトの作成と初期化 [`AsReaderSDK.getInstance()`](AsReaderSDK.md#getinstance) メソッドを呼び出して、AsReaderSDK オブジェクトを作成します。 このオブジェクトは SDK の各種機能を操作する際に使用します。 ```java AsReaderSDK mReader = AsReaderSDK.getInstance(); ``` --- ### DeviceManagerCallback と ASKManagerCallBack を実装する #### 1️⃣ DeviceManagerCallback を実装する [`DeviceManagerCallback`](DeviceManagerCallback.md) は、デバイスの接続状態の変化などを検知するために使用します。 以下のように `DeviceManager` にコールバックを設定してください。 ```java AsReaderSDK.getInstance().getDeviceManager().setDeviceManagerCallback(new DeviceManagerCallback() { @Override public void onConnectionStateChanged(ConnectionType type, boolean isConnected) { // type: 接続タイプ(USB / Bluetooth など) // isConnected: true = 接続中, false = 切断状態 } @Override public void onPermissionStateChanged(PermissionState permissionState) { // permissionState: 権限状態(GRANTED / DENIED) } @Override public void onDeviceAttached() { // デバイスが接続されたときに呼び出されます } @Override public void onDeviceDetached() { // デバイスが切断されたときに呼び出されます } }); ```   #### 2️⃣ ASKManagerCallBack を実装する [`ASKManagerCallBack`](ASKManagerCallBack.md) は、**自販機とのデータ送受信** を行う際に、受信結果やエラー通知を受け取るためのコールバックです。 以下のように、`ASKManager` にコールバックを設定してください。 ```java AsReaderSDK.getInstance().getASKManager().setAskManagerCallBack(new ASKManagerCallBack() { @Override public void onReceivedJVMAResult(List list, JVMAModel jvmaModel) { // list: 受信したデータレコード // jvmaModel: 応答のACK/NAKの種類 } @Override public void onASKManagerError(String message) { // message: エラーメッセージ } @Override public void onReceiveASKCommandMessage(String message) { // message: コマンド応答メッセージ } }); ``` --- ### AsReaderに接続 #### USB接続 - **AndroidManifest.xmlにUSB_DEVICE_ATTACHEDを追加する** ```xml ```   - **[`ConnectionType.USB`](Enum.md#connectiontype) で初期化する** ```java AsReaderSDK.getInstance().initialize(getApplicationContext(), ConnectionType.USB); ```   - **DeviceManagerCallback.onConnect で接続状態を受け取る** ```java public void onConnect(boolean isConnect) { runOnUiThread(() -> { try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } // 電源On/Offをする AsReaderSDK.getInstance().getDeviceManager().setPower(isConnect); }); } ``` - **電源Onの結果は [DeviceManagerCallback.onCompletedPreparation](DeviceManagerCallback.md#oncompletedpreparation) でコールバックされる** --- #### BLE接続 - **AndroidManifest.xml に BLE の権限を追加する** ```xml ```   - **[`ConnectionType.BLE`](Enum.md#connectiontype) で初期化する** ```java AsReaderSDK.getInstance().initialize(getApplicationContext(), ConnectionType.BLE); ```   - **[`BLEScanCallback`](BLEScanCallback.md) を実装する** ```java AsReaderSDK.getInstance().setBLEScanCallback(new BLEScanCallback() { @Override public void onBLEScanError(String errorMsg) { // errorMsg 詳細のエラーメッセージ } @Override public void onBLEScanResult(BluetoothDevice bluetoothDevice, String name, String rssi) { // bluetoothDevice 検出されたデバイス // name デバイス名 // rssi 電波強度 } }); ```   - **BLE使用権限を確認し、必要に応じてユーザーに許可を促す** ```java PermissionState permissionState = AsReaderSDK.getInstance().checkBlePermission(this); if (permissionState == PermissionState.LOCATION_PERMISSION_DENIED_FOREVER || permissionState == PermissionState.BLUETOOTH_PERMISSION_DENIED_FOREVER) { String title = ""; String message = "Permission has been denied more than once.\nPlease allow it from app setting page"; switch (permissionState) { case LOCATION_PERMISSION_DENIED_FOREVER: title = "Location Permission"; break; case BLUETOOTH_PERMISSION_DENIED_FOREVER: title = "Bluetooth Permission"; break; } AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(title).setMessage(message); builder.setPositiveButton("OK", (d, i) -> { final Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.fromParts("package", getPackageName(), null)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); }); AlertDialog alertDialog = builder.create(); alertDialog.show(); } ```   - **BLEデバイスをスキャンする** ```java AsReaderSDK.getInstance().startBLEScanDevice(); ``` 検出結果は [`BLEScanCallback.onBLEScanResult`](BLEScanCallback.md#onblescanresult) でコールバックされます。   - **BLEデバイスに接続する** ```java AsReaderSDK.getInstance().open(bluetoothDevice); ```   - **[`DeviceManagerCallback.onConnect`](DeviceManagerCallback.md#onconnect) で接続状態を受け取り、接続成功時に電源Onする** ```java public void onConnect(boolean isConnect) { runOnUiThread(() -> { try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } // 電源On/Offをする AsReaderSDK.getInstance().getDeviceManager().setPower(isConnect); }); } ```   - **電源Onの結果は [DeviceManagerCallback.onCompletedPreparation](DeviceManagerCallback.md#oncompletedpreparation) でコールバックされる** --- ### メソッドの呼び出し SDKでよく使用される通信処理は、専用のメソッドとして提供されています。 必要なパラメータを渡すと、実行結果は `ASKManagerCallBack` の [`onReceivedJVMAResult`](ASKManagerCallBack.md#onreceivedjvmaresult) メソッドでコールバックされます。 また、AsReader の電源が正常に ON になった場合は、デリゲートメソッド [`onCompletedPreparation`](DeviceManagerCallback.md#oncompletedpreparation) が呼ばれます。 このとき、コールバックパラメータ `isPowerOn` が `true` であれば通信が可能です。 以下は、[`getVmData`](ASKManager.md#getvmdata) メソッドを使用したデータ収集のサンプルコードです。 同様の手順で [他の通信メソッド](ASKManager.md) も呼び出せます。 ```java AsReaderSDK.getInstance().getASKManager().setTerminalPassword("1234567890"); AsReaderSDK.getInstance().getASKManager().setTerminalSettingCode("1234567890"); // 収集したい DataID を作成します(複数作成可能) List dataRecords = new ArrayList<>(); dataRecords.add(JVMADataId.InputCashQuantity.getName()); dataRecords.add(JVMADataId.QuitCashQuantity.getName()); // SDK のメソッドを呼び出してデータを収集します AsReaderSDK.getInstance().getASKManager().getVmData(true, dataRecords); ```