Android SDK
TapSdk auto-connects paired devices and can manage Text ↔ Controller across the activity lifecycle.
Package
| Source | TapWithUs/tap-android-sdk |
|---|---|
| License | Apache 2.0 |
| Status | Official · Maven 0.3.6 |
| Language | Java / Kotlin |
Install
Require Maven Central, then:
build.gradle
implementation 'io.github.tapwithus:tap-android-sdk:0.3.6'Hello Tap
MainActivity.java
TapSdk sdk = TapSdkFactory.getDefault(this);
sdk.registerTapListener(new TapListener() {
@Override
public void onTapConnected(@NonNull String tapIdentifier) {
Log.d("Tap", "connected " + tapIdentifier);
}
@Override
public void onTapDisconnected(@NonNull String tapIdentifier) {
Log.d("Tap", "disconnected " + tapIdentifier);
}
@Override
public void onTapInputReceived(@NonNull String tapIdentifier, int data, int repeatData) {
boolean[] fingers = TapSdk.toFingers(data);
Log.d("Tap", "combination=" + data + " repeat=" + repeatData);
// fingers[0]=thumb … fingers[4]=pinky
}
@Override
public void onMouseInputReceived(@NonNull String tapIdentifier, @NonNull MousePacket data) { }
@Override
public void onAirMouseInputReceived(@NonNull String tapIdentifier, @NonNull AirMousePacket data) { }
@Override
public void onRawSensorInputReceived(@NonNull String tapIdentifier, @NonNull RawSensorData rsData) { }
@Override public void onBluetoothTurnedOn() { }
@Override public void onBluetoothTurnedOff() { }
@Override public void onTapStartConnecting(@NonNull String tapIdentifier) { }
@Override public void onTapResumed(@NonNull String tapIdentifier) { }
@Override public void onTapChanged(@NonNull String tapIdentifier) { }
@Override public void onTapShiftSwitchReceived(@NonNull String tapIdentifier, int data) { }
@Override public void onTapChangedState(@NonNull String tapIdentifier, int state) { }
@Override public void onError(@NonNull String tapIdentifier, int code, @NonNull String description) {
Log.e("Tap", description);
}
});
// Hook activity lifecycle so Text mode is restored in background:
@Override protected void onResume() { super.onResume(); sdk.resume(); }
@Override protected void onPause() { sdk.pause(); super.onPause(); }NOTEPair Tap in Android Bluetooth settings first. The SDK connects to paired devices; it does not discover unpaired Taps.
TapListener
Entry point: TapSdkFactory.getDefault(context) or construct TapSdk with TapBluetoothManager. Register with registerTapListener. Combination onTapInputReceived uses the same 1–31 bitmask as other platforms; repeatData is 1/2/3 for single/double/triple.
Modes
java
sdk.startControllerMode(tapIdentifier);
sdk.startTextMode(tapIdentifier);
sdk.startControllerWithMouseHIDMode(tapIdentifier);
sdk.startControllerWithFullHIDMode(tapIdentifier);
sdk.startRawSensorMode(tapIdentifier, (byte)0, (byte)0, (byte)0);
sdk.setDefaultMode(mode, true); // applyImmediateBy default the SDK switches to Controller on connect and back to Text when backgrounded (unless you disable pause/resume handling).
Raw sensors
java
sdk.startRawSensorMode(tapIdentifier, (byte)0, (byte)0, (byte)0);
// in onRawSensorInputReceived:
if (rsData.dataType == RawSensorData.DataType.Device) {
Point3 thumb = rsData.getPoint(RawSensorData.iDEV_THUMB);
} else if (rsData.dataType == RawSensorData.DataType.IMU) {
Point3 gyro = rsData.getPoint(RawSensorData.iIMU_GYRO);
}TapXR
Spatial Control features are for qualified TapXR developers. Request access. See README for TapXRState and XR air-gesture constants 100–102.
Haptics
java
sdk.vibrate(tapIdentifier, new int[] { 500, 100, 500 });