Aktualisiert am 15 Min. Lesezeit Von Marvin Frankenfeld

Android-Dokumentenscanner mit Kotlin entwickeln

Diese Anleitung zeigt, wie Sie mit Kotlin und dem Docutain SDK 1.9.0.0 einen produktionsreifen Dokumentenscanner in eine native Android-App integrieren.

Der fertige Ablauf erfasst oder importiert Dokumente, erkennt ihre Kanten, korrigiert die Perspektive und bereitet die Seiten für PDF-Export, OCR oder strukturierte Datenextraktion auf. Die Verarbeitung erfolgt lokal auf dem Gerät; Ihre App entscheidet selbst, ob und wohin ein Ergebnis gespeichert oder übertragen wird.

Die Beispiele sind auf Android 16 (API-Level 36) ausgerichtet und verwenden die aktuelle Activity Result API. Für eine minimale Integration können Sie zunächst nur die Einrichtung und den Scanner umsetzen und OCR oder Datenextraktion später ergänzen.

Mindestversion
Android 6.0 / API 23
Beispielziel
Android 16 / API 36
Verarbeitung
100 % lokal und offline
Ergebnisse
PDF, JPG, OCR und JSON
Direkt zur Einrichtung

Was Sie entwickeln

Ein mobiler Dokumentenscanner ist mehr als eine Kameraansicht. Ein zuverlässiger Scanprozess muss den Nutzer führen, das Dokument im Kamerabild erkennen, im richtigen Moment auslösen, die Perspektive korrigieren und ein konsistentes Ergebnis für die weitere Verarbeitung erzeugen.

Der Ablauf in dieser Anleitung:

  1. Die einsatzbereite Scan-Oberfläche von Docutain aus Ihrer Activity starten.
  2. Eine oder mehrere Seiten erfassen oder vorhandene Bilder importieren.
  3. Seiten prüfen, zuschneiden, drehen, filtern und sortieren lassen.
  4. Ein durchsuchbares PDF oder einzelne Seitenbilder exportieren.
  5. Optional den vollständigen OCR-Text lesen oder strukturierte Dokumentdaten als JSON extrahieren.

Docutain führt diese Schritte offline aus. Das ist besonders relevant, wenn Dokumente persönliche, finanzielle oder geschäftliche Daten enthalten und die Anwendung auch ohne Netzwerkverbindung funktionieren soll.

Praxisbeispiel

Vom Kamerabild zum verwertbaren Dokument

Eine Scanner-Integration muss auch mit schrägen Aufnahmewinkeln, Wellen im Papier und ungleichmäßiger Ausleuchtung umgehen. Docutain erkennt die Dokumentgrenzen und bereitet die Seite für Export, OCR oder Datenextraktion auf.

Zerknitterte Demo-Rechnung schräg auf einem Tisch fotografiert
Vor der KorrekturGewellt, schräg aufgenommen und ungleichmäßig ausgeleuchtet
Perspektivisch korrigierte und zugeschnittene Demo-Rechnung
Nach der KorrekturEntzerrt, zugeschnitten und für die weitere Verarbeitung vorbereitet

Voraussetzungen für Android 16

Komponente Empfohlene Konfiguration für diese Anleitung
Programmiersprache Kotlin
Minimale Android-Version Android 6.0 / API-Level 23
Compile und Target SDK API-Level 36 für Android 16
Android Gradle Plugin Eine aktuelle, mit API 36 kompatible Version; Docutain erfordert mindestens 8.0.2
Testgerät Ein physisches Android-Gerät mit rückseitiger Kamera

Setzen Sie compileSdk = 36 und targetSdk = 36, wenn Sie die App für Android 16 vorbereiten. Google Play verlangt ab dem 31. August 2026 für neue Apps und App-Updates grundsätzlich API-Level 36 als Zielversion; Ausnahmen für bestimmte Geräteklassen und spätere Änderungen finden Sie in den offiziellen Target-API-Anforderungen.

Docutain SDK 1.9.0.0 hinzufügen

1. Maven Central einbinden

Stellen Sie sicher, dass mavenCentral() in der settings.gradle verfügbar ist:

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}

2. SDK-Module hinzufügen

Das UI-Modul enthält den Dokumentenscanner. Ergänzen Sie das DataExtraction-Modul, wenn Ihre App auch OCR oder strukturierte Datenextraktion benötigt.

def docutainSdkVersion = '1.9.0.0'

// Document Scanner UI
implementation("de.docutain:Docutain-SDK-UI:$docutainSdkVersion")

// Optional: OCR and structured data extraction
implementation("de.docutain:Docutain-SDK-DataExtraction:$docutainSdkVersion")

Wenn Sie OCR oder Datenextraktion verwenden, setzen Sie außerdem android.enableJetifier=true in der gradle.properties. Prüfen Sie vor einem späteren Versionsupdate den Android-SDK-Changelog auf Migrationshinweise.

3. Manifest prüfen

Das zusammengeführte App-Manifest muss für kamerabasiertes Scannen den Kamerazugriff enthalten:

<uses-permission android:name="android.permission.CAMERA" />

<!-- Use required="false" if the app also supports file-only import. -->
<uses-feature
    android:name="android.hardware.camera"
    android:required="false" />

Hochauflösende Dokumentbilder benötigen Arbeitsspeicher. Die Android-Einrichtung von Docutain empfiehlt deshalb, für die Host-App einen großen Heap zu aktivieren:

<application
    android:largeHeap="true"
    ... >
</application>

SDK initialisieren

Initialisieren Sie Docutain, bevor der Scanner verfügbar ist. Ein produktiver Lizenzschlüssel ist an die applicationId der App gebunden. Für einen ersten Test kann das SDK 60 Sekunden ohne Schlüssel ausgeführt werden; für realistische Tests steht eine erweiterte kostenlose Testlizenz bereit.

import de.docutain.sdk.DocutainSDK

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val initialized = DocutainSDK.initSDK(
            this.application,
            "<YOUR-LICENSE-KEY>"
        )

        if (!initialized) {
            val error = DocutainSDK.getLastError()
            // Log the error and disable actions that require the SDK.
        }
    }
}

Lassen Sie keinen Scan starten, wenn die Initialisierung fehlgeschlagen ist. Für die Diagnose kann das SDK-Protokoll über die Docutain-Logger-API abgerufen und bei Bedarf an den Support übermittelt werden.

Dokumentenscanner starten

Registrieren Sie den Result Contract einmal als Property der Activity oder des Fragments. Starten Sie ihn mit einer neuen DocumentScannerConfiguration, sobald der Nutzer auf den Scan-Button tippt.

import de.docutain.sdk.ui.DocumentScannerConfiguration
import de.docutain.sdk.ui.ScanResult

private val documentScanResult = registerForActivityResult(ScanResult()) { success ->
    if (success) {
        // The scanned pages are now available through Docutain's Document APIs.
        // Continue with PDF, image, OCR or data extraction.
    } else {
        // The user canceled the scan process.
    }
}

private fun startDocumentScan() {
    val configuration = DocumentScannerConfiguration()
    documentScanResult.launch(configuration)
}

Die Standardkonfiguration unterstützt bereits automatische Aufnahme, mehrseitige Dokumente und die Seitenbearbeitung. Beginnen Sie mit diesen Vorgaben, testen Sie den vollständigen Ablauf und passen Sie nur die für Ihren Anwendungsfall benötigten Optionen an.

Scan und Import konfigurieren

Das folgende Beispiel aktiviert eine abschließende Seitenbestätigung und erlaubt eine erneute Aufnahme:

private fun startConfiguredScan() {
    val configuration = DocumentScannerConfiguration().apply {
        autoCapture = true
        multiPage = true
        confirmPages = true
        pageEditConfig.allowPageRetake = true
    }

    documentScanResult.launch(configuration)
}

Weitere wichtige Konfigurationsentscheidungen:

  • Automatische oder manuelle Aufnahme: autoCapture steuert das Auslösen; allowCaptureModeSetting kann einen Schalter für Nutzer einblenden.
  • Einzel- oder mehrseitig: Setzen Sie multiPage = false, wenn genau eine Seite zulässig ist.
  • Prüfablauf: Die Einstellungen für die Seitenbearbeitung steuern Zuschnitt, Filter, Drehung, Sortierung, erneute Aufnahme, Hinzufügen und Löschen.
  • Kamera und Import: Als Quelle sind Kamera, ein oder mehrere Galeriebilder, von der App bereitgestellte Bilddateien oder Kamera mit Import-Button möglich.
  • Branding: Farben, Icons, Button-Beschriftungen und Scannertexte lassen sich an die Host-App anpassen.
  • Nutzerführung: Onboarding und Scan Tips sind optional und können Standard- oder eigene Inhalte verwenden.

Prüfen Sie die aktuelle Konfigurationsreferenz für Document Scan, bevor Sie sich in einer langfristig gepflegten Anwendung auf bestimmte Standardwerte verlassen.

PDF, Bilder, OCR und strukturierte JSON-Daten erzeugen

PDF erstellen

Nach einem erfolgreichen Scan erstellt Document.writePDF() abhängig von der gewählten Option und dem verfügbaren OCR-Modul ein durchsuchbares oder nicht durchsuchbares PDF. Bei langen Dokumenten kann die PDF-Erzeugung Zeit benötigen und sollte in einer produktiven App außerhalb des UI-Threads laufen.

import de.docutain.sdk.Document
import de.docutain.sdk.DocutainSDK
import java.io.File

val pdfFile = Document.writePDF(File(filesDir, "scanned-document.pdf"))
if (pdfFile == null) {
    val error = DocutainSDK.getLastError()
}

Zusätzlich lassen sich Seitenformat und maximale Dateigröße vorgeben. Komprimierung tauscht Ausgabequalität und Verarbeitungszeit gegen eine kleinere Datei.

Seitenbilder exportieren

Mit Document.pageCount() und Document.writeImage() exportieren Sie JPG-Dateien. Seitenindizes beginnen bei 1. Alternativ können Sie Seiten als Bitmap oder ByteArray abrufen und zwischen gefilterter, nur zugeschnittener und ursprünglicher Quelle wählen.

val pageCount = Document.pageCount()
for (i in 1..pageCount) {
    val file = File(filesDir, "Image$i.jpg")
    val fileReturn = Document.writeImage(i, file)
}

OCR-Text lesen

import de.docutain.sdk.dataextraction.DocumentDataReader

val completeText = DocumentDataReader.getText()
val firstPageText = DocumentDataReader.getText(1)

Strukturierte Dokumentdaten extrahieren

val jsonData = DocumentDataReader.analyze()

Das zurückgegebene JSON kann Felder wie Adressen, Datumswerte, Beträge, Rechnungskennungen und Zahlungsreferenzen enthalten. Optionale Analyseoptionen stehen für BIC, Zahlungsstatus und SEPA-Gläubiger bereit. Konfigurieren Sie diese vor dem Scan und validieren Sie extrahierte Werte anhand Ihrer Geschäftsregeln, bevor sie automatisiert weiterverarbeitet werden.

Test-Checkliste für Android 16

compileSdk und targetSdk anzuheben, ist nur der erste Schritt. Testen Sie Scanner und umgebenden App-Ablauf unter Android 16 mindestens in diesen Bereichen:

  • Kameraberechtigung: erste Anfrage, Ablehnung, spätere Freigabe und Widerruf.
  • Edge-to-Edge-Layouts: keine Bedienelemente unter Status- oder Navigationsleiste.
  • Predictive Back: Abbrechen und Verlassen der Scanneransichten verhalten sich wie erwartet.
  • Große Displays und Rotation: Die Activity bleibt auf Tablets, Foldables und in skalierbaren Fenstern bedienbar.
  • 16-KB-Speicherseiten: aktuelle arm64-Geräte oder Emulatoren mit der neuesten SDK-Version testen.
  • Prozesswiederherstellung: Ablauf nach Hintergrundwechsel oder Neuerstellung der Host-Activity wiederholen.
  • Echte Dokumente: unterschiedliche Papierformate, Beleuchtung, Hintergründe, Seitenzahlen und schwächere Geräte einbeziehen.
  • Ergebnisverarbeitung: leere, abgebrochene und fehlgeschlagene Zustände vor Upload oder Speicherung prüfen.

Berücksichtigen Sie sowohl die Änderungen für alle Apps als auch die Änderungen für Apps mit Ziel-API 36 in Ihren Releasetests.

Häufige Integrationsfehler

  • UI- und OCR-APIs verwenden, ohne die jeweils benötigten SDK-Module hinzuzufügen.
  • Scanaktionen zulassen, obwohl DocutainSDK.initSDK() den Wert false geliefert hat.
  • PDF-Erzeugung oder umfangreiche Ergebnisverarbeitung im Main Thread ausführen.
  • Den Kameraablauf ausschließlich im Emulator testen.
  • OCR-Ergebnisse oder extrahierte Felder ohne anwendungsseitige Validierung als vollständig voraussetzen.
  • Einen produktiven Lizenzschlüssel in eine App mit anderer applicationId kopieren.

Offizielle Quellen

Technische Quellen zuletzt am 29. August 2026 geprüft.

HÄUFIGE FRAGEN

Android-Dokumentenscanner: Fragen zur Integration





Kontaktieren Sie uns und erhalten Sie Ihr Angebot


Lassen Sie unseren Kollegen Harry Beck wissen, wie wir Ihnen helfen können und erhalten Sie ein unverbindliches Angebot.



Informationen zur Verarbeitung Ihrer Angaben finden Sie in unseren Datenschutzhinweisen.


Diesen Artikel teilen


Diesen Artikel in Facebook teilen Diesen Artikel in LinkedIn teilen Diesen Artikel in Twitter teilen Diesen Artikel in Xing teilen Diesen Artikel in Pinterest teilen Diesen Artikel über Mail teilen Diesen Artikel über WhatsApp teilen