Rheinwerk Computing < openbook >

 
Inhaltsverzeichnis
Vorwort
Teil I Grundlagen
1 Android – eine offene, mobile Plattform
2 Hallo Android!
3 Von der Idee zur Veröffentlichung
Teil II Elementare Anwendungsbausteine
4 Wichtige Grundbausteine von Apps
5 Benutzeroberflächen
6 Multitasking
Teil III Gerätefunktionen nutzen
7 Telefonieren und surfen
8 Sensoren, GPS und Bluetooth
Teil IV Dateien und Datenbanken
9 Dateien lesen, schreiben und drucken
10 Datenbanken
Teil V Multimedia und Produktivität
11 Multimedia
12 Kontakte und Organizer
A Einführung in Kotlin
B Jetpack Compose
C Häufig benötigte Codebausteine
D Literaturverzeichnis
E Die Begleitmaterialien
Stichwortverzeichnis

Ihre Meinung?
Spacer
<< zurück
Android 11 von Thomas Künneth
Das Praxisbuch für App-Entwickler
Buch: Android 11

Android 11
Pfeil 8 Sensoren, GPS und Bluetooth
Pfeil 8.1 Sensoren
Pfeil 8.1.1 Die Klasse »SensorManager«
Pfeil 8.1.2 Dynamische Sensoren und Trigger
Pfeil 8.1.3 Ein Schrittzähler
Pfeil 8.2 GPS und ortsbezogene Dienste
Pfeil 8.2.1 Den aktuellen Standort ermitteln
Pfeil 8.2.2 Positionen auf einer Karte anzeigen
Pfeil 8.3 Bluetooth
Pfeil 8.3.1 Geräte finden und koppeln
Pfeil 8.3.2 Daten senden und empfangen
Pfeil 8.3.3 Bluetooth Low Energy
Pfeil 8.4 Authentifizierung durch biometrische Merkmale
Pfeil 8.4.1 Fingerabdrucksensor im Emulator einrichten
Pfeil 8.4.2 Jetpack Biometric
Pfeil 8.5 Zusammenfassung
 
Zum Seitenanfang

8.4    Authentifizierung durch biometrische Merkmale Zur vorigen ÜberschriftZur nächsten Überschrift

Viele Smartphones und Tablets haben Fingerabdrucksensoren oder Irisscanner, mit denen sich die Benutzer Ihrer App authentifizieren können. Das geht schneller als das Eingeben eines Passworts und ist halbwegs sicher. Wie Sie biometrische Merkmale abfragen, zeige ich Ihnen anhand der Beispiel-App BiometricPromptDemo. Damit Sie sie auch ohne entsprechende Hardware ausprobieren können, werfen wir zunächst einen Blick auf die Konfiguration des Emulators.

 
Zum Seitenanfang

8.4.1    Fingerabdrucksensor im Emulator einrichten Zur vorigen ÜberschriftZur nächsten Überschrift

In den Systemeinstellungen erreichen Sie unter Security • Fingerprint die Seite zum Hinterlegen und Löschen von Fingerabdrücken. Damit Sie sich auf diese Weise authentifizieren können, muss eine zusätzliche Sperrmethode aktiv sein. Da Sie diese im Emulator sehr wahrscheinlich nicht konfiguriert haben, sehen Sie als Erstes die Seite zum Einrichten der Bildschirmsperre (Abbildung 8.11). Wählen Sie am besten Fingerprint + PIN, und geben Sie dann zweimal hintereinander dieselbe Folge aus vier Ziffern ein. Anschließend können Sie einstellen, welche Inhalte Sie auf dem Sperrbildschirm sehen möchten. Done beendet die Konfiguration der Bildschirmsperre.

Jetzt können Sie das Entsperren mit Fingerabdruck einrichten. Die erste Seite des Assistenten ist in Abbildung 8.12 zu sehen. Klicken Sie auf Next.

Bildschirmsperre einrichten

Abbildung 8.11    Bildschirmsperre einrichten

Entsperren mit Fingerabdruck einrichten

Abbildung 8.12    Entsperren mit Fingerabdruck einrichten

Öffnen Sie nun mit inline image die Emulatoreinstellungen, und wechseln Sie auf die Seite Fingerprint (Abbildung 8.13). Klicken Sie auf TOUCH THE SENSOR.

Die Emulator-Einstellungsseite »Fingerprint«

Abbildung 8.13    Die Emulator-Einstellungsseite »Fingerprint«

Folgen Sie den Anweisungen im Emulator, und legen Sie den Finger wiederholt auf den virtuellen Sensor, indem Sie TOUCH THE SENSOR erneut anklicken (Abbildung 8.14). Nachdem Sie den virtuellen Fingerabdruck erfolgreich hinterlegt haben, beenden Sie den Assistenten mit Done (Abbildung 8.15).

Die Seite Fingerprint des simulierten Geräts sollte nun in etwa Abbildung 8.16 entsprechen.

Finger wiederholt auf den virtuellen Sensor legen

Abbildung 8.14    Finger wiederholt auf den virtuellen Sensor legen

Der Fingerabdruck wurde erfolgreich hinzugefügt.

Abbildung 8.15    Der Fingerabdruck wurde erfolgreich hinzugefügt.

 
Zum Seitenanfang

8.4.2    Jetpack Biometric Zur vorigen ÜberschriftZur nächsten Überschrift

Unterstützung für Fingerabdrucksensoren gibt es schon seit Android 6.0; die Klasse android.hardware.fingerprint.FingerprintManager hat Google mit API-Level 23 eingeführt. Sie koordiniert den Zugriff auf entsprechende Hardware. Allerdings mussten Entwickler selbst für die Interaktion mit dem Anwender sorgen, denn einen systemweiten Dialog gab es noch nicht. Andere biometrische Merkmale waren ebenfalls nicht vorgesehen. Hersteller haben notgedrungen ihr eigenes Süppchen gekocht. Seit Android 9 (API-Level 28) gibt es android.hardware.biometrics.BiometricPrompt. Sie löst den alten FingerprintManager ab. Die Klasse unterstützt zusätzliche Scannertypen (zum Beispiel in das Display eingearbeitete Sensoren) und stellt eine einheitliche Benutzeroberfläche zur Verfügung.

Ein hinterlegter Fingerabdruck

Abbildung 8.16    Ein hinterlegter Fingerabdruck

Jetpack Biometric erleichtert den nicht immer einfachen Umgang mit verschiedenen Plattformversionen. Die Bibliothek stellt eine einheitliche API zur Verfügung und zeigt entweder die systemweite Oberfläche oder einen Nachbau an. Sie steht ab Android 6 zur Verfügung. Um die Komponente in eigenen Programmen zu integrieren, fügen Sie die Zeile

implementation "androidx.biometric:biometric:1.0.1"

Ihrer modulspezifischen build.gradle-Datei hinzu. Die Authentifizierung mittels biometrischer Merkmale ist dann in wenigen Schritten erledigt. Diese zeigt meine Klasse BiometricPromptDemoActivity (Listing 8.17). Als Erstes sollten Sie mit canAuthenticate() abfragen, ob das Gerät die biometrische Authentifizierung unterstützt. Hierfür benötigen Sie ein Objekt des Typs androidx.biometric.BiometricManager. Sie erhalten es durch Aufruf von BiometricManager.from().

package com.thomaskuenneth.androidbuch.biometricprompt

import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.biometric.BiometricManager
import androidx.biometric.BiometricManager.BIOMETRIC_SUCCESS
import androidx.biometric.BiometricPrompt
import androidx.biometric.BiometricPrompt.AuthenticationCallback
import androidx.biometric.BiometricPrompt.AuthenticationResult
import androidx.biometric.BiometricPrompt.PromptInfo
import kotlinx.android.synthetic.main.activity_main.*

class BiometricPromptDemoActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener { showDialog() }
val biometricManager = BiometricManager.from(this)
button.isEnabled =
biometricManager.canAuthenticate() == BIOMETRIC_SUCCESS
}

private fun toast(resid: Int) = Toast.makeText(this, resid,
Toast.LENGTH_LONG).show()

private fun showDialog() {
val info = PromptInfo.Builder()
.setDescription(getString(R.string.descr))
.setTitle(getString(R.string.title))
.setConfirmationRequired(true)
.setSubtitle(getString(R.string.subtitle))
.setNegativeButtonText(getString(R.string.cancel))
.build()
BiometricPrompt(this, mainExecutor,
object : AuthenticationCallback() {
override fun onAuthenticationError(errorCode: Int,
errString: CharSequence) {
toast(R.string.error)
}

override fun onAuthenticationSucceeded(
result: AuthenticationResult) {
toast(R.string.ok)
}

override fun onAuthenticationFailed() {
toast(R.string.failed)
}
}).authenticate(info)
}
}

Listing 8.17    Die Klasse »BiometricPromptDemoActivity«

Um den Dialog anzuzeigen, erzeugen Sie einen PromptInfo.Builder. Mit setTitle(), setSubtitle() und setDescription() vergeben Sie einen Titel, Untertitel und eine Beschreibung. setConfirmationRequired() steuert, ob nach einer erfolgreichen Authentifizierung der Dialog automatisch geschlossen werden darf. setNegativeButtonText() blendet einen Button ein, mit dem der Nutzer die Interaktion abbrechen kann. build() erzeugt ein androidx.biometric.BiometricPrompt.PromptInfo-Objekt. Es wird der Methode authenticate() einer BiometricPrompt-Instanz übergeben.

Dessen Konstruktor erwartet eine FragmentActivity, einen Executor und einen AuthenticationCallback. Activities, die den Dialog anzeigen möchten, müssen von androidx.fragment.app.FragmentActivity oder deren Kinder (zum Beispiel AppCompatActivity) ableiten. Die Methoden von AuthenticationCallback werden aufgerufen, je nachdem ob

  • der Benutzer erfolgreich authentifiziert wurde (onAuthenticationSucceeded()),

  • eine Authentifizierung nicht geklappt hat, zum Beispiel weil der Finger nicht richtig auf dem Sensor lag (onAuthenticationFailed()),

  • ein Fehler aufgetreten ist (onAuthenticationError()).

Der Executor legt fest, auf welchem Thread der Callback aufgerufen wird. Mein Beispiel verwendet den Mainthread. Die Methode getMainExecutor() gehört zur Klasse android.content.ContextWrapper. Alternativ könnten Sie ContextCompat.getMainExecutor verwenden. Das bietet sich vor allem an, wenn Ihre App auch auf älteren Versionen laufen soll.

 


Ihre Meinung?

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de

<< zurück
Zur Rheinwerk-Konferenz für Kotlin
 Buchempfehlungen
Zum Rheinwerk-Shop: Kotlin

Kotlin


Zum Rheinwerk-Shop: Praxisbuch Usability und UX

Praxisbuch Usability und UX


Zum Rheinwerk-Shop: Flutter und Dart

Flutter und Dart


Zum Rheinwerk-Shop: App-Design

App-Design


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und in die Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2023
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 
[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern