SDKの使い方¶
SDKの追加¶
「app」->「libs」->「右クリック」->「Open in Finder」を選択します 。

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


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

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

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

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>
ConnectionType.USBで初期化する
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);
});
}
電源Onの結果は DeviceManagerCallback.onCompletedPreparation でコールバックされる
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" />
ConnectionType.BLEで初期化する
AsReaderSDK.getInstance().initialize(getApplicationContext(), ConnectionType.BLE);
BLEScanCallbackを実装する
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);
DeviceManagerCallback.onConnectで接続状態を受け取り、接続成功時に電源Onする
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 でコールバックされる
メソッドの呼び出し¶
SDKでよく使用される通信処理は、専用のメソッドとして提供されています。
必要なパラメータを渡すと、実行結果は ASKManagerCallBack の onReceivedJVMAResult メソッドでコールバックされます。
また、AsReader の電源が正常に ON になった場合は、デリゲートメソッド onCompletedPreparation が呼ばれます。
このとき、コールバックパラメータ isPowerOn が true であれば通信が可能です。
以下は、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);