Getting Started

Add the SDK to your project

build.gradle
repositories {
    jcenter()
    maven {
        url "https://bin.socketmobile.com/repo/snapshots"
    }
}

dependencies {
    implementation 'com.socketmobile:capture:1.0.3'
}

Start Capture

Create a singleton instance of CaptureClient at the highest appropriate scope for your application.

// Note: The second argument, <my app id>, is the colon separated platform and app id you used
// to generate your appkey - e.g. android:com.example.myapp
AppKey appkey = new AppKey("<my appkey>", "<my app id>", "<my developer id>");
CaptureClient client = new CaptureClient(appkey);
client.setListener(mListener);
client.connect(connectionCallback);

Where mListener implements the CaptureClient.Listener interface and connectionCallback implements the ConnectionCallback interface.

ConnectionCallback connectionCallback = new ConnectionCallback() {
    @override public void onConnectionStateChanged(ConnectionState state) {
        switch(state.get()) {
            case ConnectionState.CONNECTING:
                // do something or nothing
                break;
            case ConnectionState.CONNECTED:
                // client is now usable
                break;
            case ConnectionState.DISCONNECTING:
                // only called when shutting down gracefully
                break;
            case ConnectionState.DISCONNECTED:
                if(state.disconnectCausedByError()) {
                    // Handle error
                } else {
                    // Shut down normally
                }
            default:
                // Unreachable
                break;
        }
    }
}

The listener will be notified as Capture devices become usable or unusable.

@Override
public void onDeviceStateEvent(DeviceStateEvent event) {
    mDevice = event.getDevice();
    DeviceState state = event.getState()
    switch (state.intValue()) {
        case DeviceState.GONE:
            // Scanner is gone
            break;
        case DeviceState.AVAILABLE:
            // Scanner is connected to the service. You can choose to open the device or not.
            break;
        case DeviceState.OPEN:
            // Scanner is open, but you do not have control of it. It may be in the process of
            // opening or another application may have opened the scanner.
            break;
        case DeviceState.READY:
            // Scanner is ready. Configure scanner
            break;
    }
}

Most importantly, the listener will also be notified of decoded data

public void onData(DataEvent event) {
    DeviceClient device = event.getDevice();
    String data = event.getData().getString();
    // do something
}