# Triggering a Scanner

Programmatically trigger Socket Mobile barcode scanners and NFC readers using CaptureSDK. Covers single scan trigger (one read per trigger), continuous scanning mode (repeated reads until stopped), enabling and disabling the physical trigger button, and handling combo devices (scanner + NFC reader like the S370) by identifying and triggering specific device functions. Includes code samples.

## Triggering a Scanner Once

In some cases it could be convenient to present a Trigger button in the UI (on the screen), especially for our [SocketCam feature](/docs/socketcam/implementation). Here is a sample to trigger a scan:

## Java

```java
PropertyCallback mSetPropertyCallback = new PropertyCallback() {
    @Override
    public void onComplete(CaptureError captureError, Property property) {
        if (captureError != null) {
            Log.e("Trigger", "Set Trigger failed: " + captureError.getMessage());
        }
    }
};

device.trigger(mSetPropertyCallback);
```

## Kotlin

```kotlin
val mSetPropertyCallback = PropertyCallback { captureError, _ ->
    if (captureError != null) {
        Log.e("Trigger", "Set Trigger failed: ${captureError.message}")
    }
}

device.trigger(mSetPropertyCallback)
```

## Swift

```swift
device.setTrigger(.start) { result, propertyResult in
    print("Start the trigger once returned \(result.rawValue)")
}
```

## C#

```csharp
private async void ButtonTrigger_Click(object sender, EventArgs e)
{
    // device is of type CaptureHelperDevice
    var task = await device.SetTriggerAsync(ICaptureProperty.Values.Trigger.kStart);

    if (!SktErrors.SKTSUCCESS(task.Result))
    {
        Console.WriteLine($"Trigger device Failed - Error: {task.Result}");
    }
}
```

## Dart

```dart
import 'package:capturesdk_flutter/capturesdk.dart';

try {
  await device.setTrigger(Trigger.start);
} on CaptureException catch (e) {
  debugPrint('SetTrigger error: ${e.code} ${e.message}');
}
```

## JavaScript

```javascript
import { Trigger } from 'react-native-capture';

try {
  await device.setTrigger(Trigger.Start);
} catch (err) {
  console.error('SetTrigger error:', err?.code ?? err?.error?.code);
}
```

## Triggering a Scanner Continuously

In some cases it could be convenient to present a Trigger continuous button in the UI (on the screen), especially for our [SocketCam feature](/docs/socketcam/implementation). Here is a sample to trigger a scan continuously:

## Java

```java
device.triggerContinuous(mSetPropertyCallback);
```

## Kotlin

```kotlin
device.triggerContinuous(mSetPropertyCallback)
```

## Swift

```swift
device.setTrigger(.continuousScan) { result, propertyResult in
    print("Start the trigger continuously returned \(result.rawValue)")
}
```

## C#

```csharp
await device.SetTriggerAsync(ICaptureProperty.Values.Trigger.kContinuousScan);
// or
await device.SetTriggerAsync(ICaptureProperty.Values.Trigger.kContinuousScanUntilRead);
```

## Dart

```dart
await device.setTrigger(Trigger.continuousScan);
```

## JavaScript

```javascript
await device.setTrigger(Trigger.ContinuousScan);
```

## Disable the Trigger Scanner Button

## Java

```java
device.triggerDisable(mSetPropertyCallback);
```

## Kotlin

```kotlin
device.triggerDisable(mSetPropertyCallback)
```

## Swift

```swift
device.setTrigger(.disable) { result, propertyResult in
    print("Disabling the trigger returns \(result.rawValue)")
}
```

## C#

```csharp
await device.SetTriggerAsync(ICaptureProperty.Values.Trigger.kDisable);
```

## Dart

```dart
await device.setTrigger(Trigger.disable);
```

## JavaScript

```javascript
await device.setTrigger(Trigger.Disable);
```

## Enable the Trigger Scanner Button

## Java

```java
device.triggerEnable(mSetPropertyCallback);
```

## Kotlin

```kotlin
device.triggerEnable(mSetPropertyCallback)
```

## Swift

```swift
device.setTrigger(.enable) { result, propertyResult in
    print("Enabling the trigger returns \(result.rawValue)")
}
```

## C#

```csharp
await device.SetTriggerAsync(ICaptureProperty.Values.Trigger.kEnable);
```

## Dart

```dart
await device.setTrigger(Trigger.enable);
```

## JavaScript

```javascript
await device.setTrigger(Trigger.Enable);
```