# Show scanner

## Show scanner

After the [initialization](https://regulaforensics.gitbook.io/android/5.3-4/initialization) is completed and the [scenario](https://regulaforensics.gitbook.io/android/5.3-4/scenarios) is set, you can start document scanning process. There are several options on how to open the camera activity.

### #1

Use this method to open camera preview activity using the default back camera, which will pass frames for recognition and return results in the [completion block](#completion-callback) when they are ready. Activity will be opened from the context which has been passed to the method:

{% tabs %}
{% tab title="Java" %}

```java
DocumentReader.Instance().showScanner(MainActivity.this, completion);
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
DocumentReader.Instance().showScanner(this@MainActivity, completion)
```

{% endtab %}
{% endtabs %}

### #2

Use this method to open camera preview activity using the specified camera, which will pass frames for recognition and return results in the [completion block](#completion-callback) when they are ready. Activity will be opened from the context which has been passed to the method:

{% tabs %}
{% tab title="Java" %}

```java
DocumentReader.Instance().showScanner(MainActivity.this, 0, completion);
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
DocumentReader.Instance().showScanner(this@MainActivity, 0, completion)
```

{% endtab %}
{% endtabs %}

### Completion callback

The current results are returned in the completion block from each camera shot with different actions ([`DocReaderAction`](https://regulaforensics.gitbook.io/android/5.3-4/enumerations/docreaderaction) enum) during the scanning process:

* **COMPLETE** - scanning process was finished
* **PROCESS** - scanning process is not finished, you can get an intermediate result from the completion block
* **CANCEL** - scanning process was canceled by the user

{% tabs %}
{% tab title="Java" %}

```java
private IDocumentReaderCompletion completion = new IDocumentReaderCompletion() {
    @Override
    public void onCompleted(int action, DocumentReaderResults results, Throwable error) {
        // processing is finished, all results are ready
        if (action == DocReaderAction.COMPLETE) { 
            // scanning process was finished              
        } else {
            // something happened before all results were ready
            if (action == DocReaderAction.CANCEL){
                Toast.makeText(MainActivity.this, "Scanning was cancelled",Toast.LENGTH_LONG).show();
            } else if(action == DocReaderAction.ERROR){
                Toast.makeText(MainActivity.this, "Error:" + error, Toast.LENGTH_LONG).show();
            }
        }
    }
};
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
private val completion = IDocumentReaderCompletion { action, results, error ->
    // processing is finished, all results are ready
    if (action == DocReaderAction.COMPLETE) {
        // scanning process was finished
    } else {
        // something happened before all results were ready
        if (action == DocReaderAction.CANCEL) {
            Toast.makeText(this@MainActivity, "Scanning was cancelled", Toast.LENGTH_LONG).show()
        } else if (action == DocReaderAction.ERROR) {
            Toast.makeText(this@MainActivity, "Error:$error", Toast.LENGTH_LONG).show()
        }
    }
}
```

{% endtab %}
{% endtabs %}

## Close scanner

Allows to close scanner, i.e. camera activity:

{% tabs %}
{% tab title="Java" %}

```java
DocumentReader.Instance().stopScanner(MainActivity.this);
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
DocumentReader.Instance().stopScanner(this@MainActivity)
```

{% endtab %}
{% endtabs %}
