SDKの使い方

SDKの追加

「app」->「libs」->「右クリック」->「Open in Finder」を選択します 。

1750131897461

 

ダウンロードした「ASR-A60D-SDK.aar」を選択します。
プロジェクトの「libs」の下に「ASR-A60D-SDK.aar」が表示されます。

1750136667644

1750136730924

「build.gradle」をダブルクリックします 。

1750136826041

依存関係にライブラリをインポートします。「Sync Now」をクリックし、同期します 。

1750136951960

同期に成功すると下図のような表示になり 、SDKの追加が完了します。

1750137278064


SDKの使用

SDKのインポート

使用するクラスで、SDKの機能を利用するために import を宣言してください。
必要なクラスやインターフェースは、用途に応じて選択して使用します。

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 オブジェクトを作成します。
このオブジェクトは SDK の各種機能を操作する際に使用します。

AsReaderSDK mReader = AsReaderSDK.getInstance();

DeviceManagerCallback と ASKManagerCallBack を実装する

1️⃣ DeviceManagerCallback を実装する

DeviceManagerCallback は、デバイスの接続状態の変化などを検知するために使用します。

以下のように DeviceManager にコールバックを設定してください。

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 は、自販機とのデータ送受信 を行う際に、受信結果やエラー通知を受け取るためのコールバックです。

以下のように、ASKManager にコールバックを設定してください。

AsReaderSDK.getInstance().getASKManager().setAskManagerCallBack(new ASKManagerCallBack() {
    @Override
    public void onReceivedJVMAResult(List<JVMARecord> 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を追加する

<activity
    android:name=".MainActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

    <intent-filter>
        <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

    <meta-data
        android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
        android:resource="@xml/usb_device_filter_a60d" />
</activity>

 

AsReaderSDK.getInstance().initialize(getApplicationContext(), ConnectionType.USB);

 

  • DeviceManagerCallback.onConnect で接続状態を受け取る

public void onConnect(boolean isConnect) {
    runOnUiThread(() -> {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        // 電源On/Offをする
        AsReaderSDK.getInstance().getDeviceManager().setPower(isConnect);
    });
}

BLE接続

  • AndroidManifest.xml に BLE の権限を追加する

<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="30"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30"/>
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" tools:targetApi="s"/>
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

 

  AsReaderSDK.getInstance().initialize(getApplicationContext(), ConnectionType.BLE);

 

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使用権限を確認し、必要に応じてユーザーに許可を促す

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デバイスをスキャンする

AsReaderSDK.getInstance().startBLEScanDevice();

検出結果は BLEScanCallback.onBLEScanResult でコールバックされます。

 

  • BLEデバイスに接続する

AsReaderSDK.getInstance().open(bluetoothDevice);

 

public void onConnect(boolean isConnect) {
    runOnUiThread(() -> {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        // 電源On/Offをする
        AsReaderSDK.getInstance().getDeviceManager().setPower(isConnect);
    });
}

 


メソッドの呼び出し

SDKでよく使用される通信処理は、専用のメソッドとして提供されています。
必要なパラメータを渡すと、実行結果は ASKManagerCallBackonReceivedJVMAResult メソッドでコールバックされます。
また、AsReader の電源が正常に ON になった場合は、デリゲートメソッド onCompletedPreparation が呼ばれます。
このとき、コールバックパラメータ isPowerOntrue であれば通信が可能です。

以下は、getVmData メソッドを使用したデータ収集のサンプルコードです。
同様の手順で 他の通信メソッド も呼び出せます。

AsReaderSDK.getInstance().getASKManager().setTerminalPassword("1234567890");
AsReaderSDK.getInstance().getASKManager().setTerminalSettingCode("1234567890");

// 収集したい DataID を作成します(複数作成可能)
List<String> dataRecords = new ArrayList<>();
dataRecords.add(JVMADataId.InputCashQuantity.getName());
dataRecords.add(JVMADataId.QuitCashQuantity.getName());

// SDK のメソッドを呼び出してデータを収集します
AsReaderSDK.getInstance().getASKManager().getVmData(true, dataRecords);