Android SDK: Getting started
This guide explains how to install the Cartrack BLE Lock SDK for Android and run the basic connection flow against a compatible BLE terminal.
Installation
- Add the latest CartrackBleLock_Android_SDK
.aarfile to your Android project (for example, under alibs/directory). - In your project-level
build.gradle, addflatDir { dirs 'libs' }.
allprojects {
repositories {
...
flatDir {
dirs 'libs'
}
}
}
- In your app-level `build.gradle`, add the `.aar` file dependency.
```kotlin
dependencies {
implementation fileTree(include: ['*.aar'], dir: 'libs')
implementation(name: 'blesdk-release_v3.0.3.aar', ext: 'aar')
}
- For Android 12 (API 31) or higher, you must declare Bluetooth permissions.
- Update your app-level
AndroidManifest.xml.
<manifest>
<uses-permission android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
...
</manifest>
Core Classes
BleService
The main entry point for the Cartrack BLE SDK. Use this class to initialize the SDK and obtain terminal instances.
Key Methods:
- BleService.configure() - Configures the BleService. This function should be called first.
- BleService.getTerminal() - Get an instance of BleTerminal associated with the given terminal ID.
- BleService.isConfigured() - Checks if the given BleTerminal instance is configured.
- BleService.clear() - Clears the configured instance.
BleTerminal
Represents a terminal that communicates with CTG devices via Bluetooth Low Energy.
Key Methods:
- BleTerminal.scanAndConnectToPeripheral - Connects to a BleTerminal device.
- BleTerminal.sendAction - Executes a Bluetooth Low Energy (BLE) action on the connected peripheral.
- BleTerminal.saveAuthKey - Encrypts the authentication key and saves it to Shared Preferences.
- BleTerminal.disconnect - Disconnects the peripheral from the BleTerminal.
- BleTerminal.getAuthKey - Retrieves the encrypted authentication key from Shared Preferences, decrypts it, and returns it.
- BleTerminal.getBleConnectionState - Retrieves the Bluetooth Low Energy (BLE) connection state of the device.
- BleTerminal.getLockState - Gets the current lock state of the vehicle.
- BleTerminal.hasKey - Checks if a terminal authentication key is available for secure communication.
- BleTerminal.removeAuthKey - Removes the authentication key from Shared Preferences.
BleListener
Interface for handling BLE events and callbacks.
Key Callbacks:
- BleListener.onError() - Called when an error occurs during a BleTerminal operation.
- BleListener.onReconnect() - Called when the Bluetooth GATT layer returns
GATT_ERRORorGATT_FAILURE. After three reconnect attempts, the SDK returnsBleError.GATTError. - BleListener.onRemoveAuthKeySuccess() - Called when the authentication key is successfully removed.
- BleListener.onSaveAuthKeySuccess() - Called when the authentication key is successfully saved.
- BleListener.onSignalStrength() - Called when the signal strength changes.
- BleListener.onTerminalCommandResult() - Called when a terminal command returns a result.
- BleListener.onTerminalConnected() - Called when the BleTerminal successfully connects to a device.
- BleListener.onTerminalDidGetVehicleStats() - Called when fetching vehicle stat.
- BleListener.onTerminalDidGetVehicleStatus() - Called when fetching vehicle status.
- BleListener.onTerminalDisconnected() - Called when terminal is disconnected.
How to Use
All examples require
import CartrackBleLockSDKsomewhere in the source file.
Initialize CartrackBleLockSDK
Initialize CartrackBleLockSDK with Context:
V2.4
BleService.configure(Context, vendorId, apiKey, countryCode)
V3.0
BleService.configure(Context)
Before starting to get the authentication key, you can create a BleTerminal variable outside the function:
var bleTerminal: BleTerminal
Get an instance of BleTerminal:
bleTerminal = BleService.getTerminal(terminalID)
Save Authentication Key
Save the authentication key with BleTerminal.saveAuthKey():
bleTerminal.saveAuthKey()
Get Authentication Key
Get the authentication key with BleTerminal.getAuthKey():
bleTerminal.getAuthKey()
This action requires network connection thus performing it earlier is encouraged before connecting to terminal.
Connect to Ble Terminal
Connect to Ble Terminal with BleTerminal.scanAndConnectToPeripheral():
V2.4
bleTerminal.scanAndConnectToPeripheral()
Under the hood, this scans peripherals around, connects and authenticates If successful, then you will get a response through BleListener.onTerminalConnected Else BleListener.onError if anything wrong happens:
- ErrorHandler.BleConnectionError.KeyNotFound
- ErrorHandler.BleConnectionError.KeyInvalid
- ErrorHandler.BleConnectionError.BluetoothUnsupported
- ErrorHandler.BleConnectionError.BluetoothUnauthorized > only if your app did not request the required permission
- ErrorHandler.BleConnectionError.LocationUnauthorized > only if your app did not request the required permission
- ErrorHandler.BleConnectionError.BluetoothPairingFailed > the system returned a connection error
- ErrorHandler.BleConnectionError.TerminalNotFound > 30 seconds timeout
V3.0
bleTerminal.scanAndConnectToPeripheral()
Under the hood, this scans peripherals around, connects and authenticates If successful, then you will get a response through BleListener.onTerminalConnected Else BleListener.onError if anything wrong happens:
- BleError.KeyNotFound
- BleError.KeyInvalid
- BleError.BluetoothUnsupported
- BleError.BluetoothUnauthorized > only if your app did not request the required permission
- BleError.LocationUnauthorized > only if your app did not request the required permission
- BleError.TerminalNotFound > the system returned a connection error
- BleError.TerminalNotFound > 30 seconds timeout
- BleError.GATTError > BluetoothGattCallback.onConnectionStateChange return other than GATT_SUCCESS
Connect to Ble Terminal with Timeout
Set connection timeout by add duration (second) in Long. Default timeout is 10 seconds:
bleTerminal.scanAndConnectToPeripheral(20)
Disconnect from Ble Terminal
Disconnect from Ble Terminal with BleTerminal.disconnect():
bleTerminal.disconnect()
This function will send a disconnect command to the terminal.
Fetch Authentication Key
Fetch authentication key from API BleTerminal.fetchAuthKey() from shared preferences:
bleTerminal.fetchAuthKey()
Remove Authentication Key
Remove the authentication key with BleTerminal.removeAuthKey() from shared preferences:
bleTerminal.removeAuthKey()
This function will not affect the authentication key on the server side.
Terminal Signal Update
Called periodically to update the BLE signal strength to Ble Terminal:
bleListener.onSignalStrength(BleSignalStrength, rssiValue)
Check Authentication Key
Called to checks if a terminal authentication key is available for secure communication:
bleListener.hasKey()
Send Ble Action to Terminal
Send lock action to terminal BleAction.LOCK:
bleTerminal.sendAction(BleAction.LOCK)
Send unlock action to terminal with BleAction.UNLOCK:
bleTerminal.sendAction(BleAction.UNLOCK)
Send headlight action to terminal with BleAction.HEADLIGHT:
bleTerminal?.sendAction(BleAction.HEADLIGHT)
Send horn action to terminal with BleAction.HORN:
bleTerminal.sendAction(BleAction.HORN)
Get the current state of vehicle's lock status - possible value - locked/unlocked with BleAction.GET_LOCK_STATE:
bleTerminal.sendAction(BleAction.GET_LOCK_STATE)
Send unlock with no key fob action to terminal with BleAction.UNLOCK_NOKEYFOB:
bleTerminal.sendAction(BleAction.UNLOCK_NOKEYFOB)
Get the current state of vehicle's status with BleAction.VEHICLE_GET_CONFIG:
bleTerminal.sendAction(BleAction.VEHICLE_GET_CONFIG)
Consist of
odometer,engineHours,engineRPM,fuelLevel,hazardsIsOn,indicators,brakesIsActive,handBrakeIsActive,lightsIsOn,driverDoorIsOpen,passengerDoorIsOpen,driverSeatbeltIsEngage,passengerSeatbeltIsEngage,hornIsActivefield.
Get the current state of vehicle's ignition status - possible value - on/off with BleAction.VEHICLE_GET_STATUS:
bleTerminal.sendAction(BleAction.VEHICLE_GET_STATUS)
V2.4
The response for all BleAction will be in BleListener.onTerminalCommandResult(bleAction: BleAction) and BleListener.onError(ErrorHandler.BleActionError/ErrorHandler.CtgError)
V3.0
The response for all BleAction will be in BleListener.onTerminalCommandResult(bleAction: BleAction) and BleListener.onError(BleError/BleError.CtgError)