APIs unter Android 5.0

API-Level: 21

Android 5.0 (LOLLIPOP) bietet neue Funktionen für Nutzer und App-Entwickler. Dieses Dokument bietet eine Einführung in die wichtigsten neuen APIs.

Wenn du eine App veröffentlicht hast, sieh dir die Verhaltensänderungen unter Android 5.0 an, die du in deiner App berücksichtigen solltest. Diese Verhaltensänderungen können sich auf deine App auf Geräten mit Android 5.0 auswirken, auch wenn du keine neuen APIs verwendest oder neue Funktionen vornimmst.

Einen allgemeinen Überblick über die neuen Plattformfunktionen finden Sie in den Highlights von Android Lollipop.

Hier geht es los

Wenn du Apps für Android 5.0 erstellen möchtest, musst du zuerst das Android SDK herunterladen. Laden Sie dann mit dem SDK Manager die Android 5.0 SDK-Plattform und die Systembilder herunter.

Ziel-API-Level aktualisieren

Wenn du deine App besser für Geräte mit Android 5.0 optimieren möchtest, setze targetSdkVersion auf "21", installiere deine App auf einem System-Image mit Android 5.0, teste sie und veröffentliche dann die aktualisierte App mit dieser Änderung.

Sie können Android 5.0-APIs verwenden und gleichzeitig ältere Versionen unterstützen, indem Sie Ihrem Code Bedingungen hinzufügen, die die System-API-Ebene prüfen, bevor APIs ausgeführt werden, die von Ihrer minSdkVersion nicht unterstützt werden. Weitere Informationen zur Abwärtskompatibilität finden Sie unter Unterstützung verschiedener Plattformversionen.

Weitere Informationen zur Funktionsweise von API-Ebenen findest du unter Was ist das API-Level?

Wichtige Verhaltensänderungen

Wenn Sie bereits eine App für Android veröffentlicht haben, kann es sein, dass Ihre App von Änderungen in Android 5.0 betroffen ist.

Ausführliche Informationen finden Sie unter Änderungen bei Android 5.0.

Benutzeroberfläche

Material Design-Unterstützung

Android 5.0 unterstützt jetzt den neuen Android-Stil Material Design. Mit Material Design können Sie Apps erstellen, die visuell dynamisch sind und Übergänge zwischen UI-Elementen haben, die für Nutzer natürlich wirken. Zu diesem Support gehören:

  • Das Material-Design
  • Schatten anzeigen
  • RecyclerView-Widget
  • Drehbare Animations- und Stileffekte
  • Material Design-Animations- und Aktivitätsübergangseffekte
  • Animatoren für Ansichtseigenschaften basierend auf dem Ansichtsstatus
  • Benutzerdefinierbare UI-Widgets und App-Leisten mit von Ihnen gesteuerten Farbpaletten
  • Animierte und nicht animierte Drawables basierend auf XML-Vektorgrafiken

Weitere Informationen zum Hinzufügen von Material Design-Funktionen zu Ihrer App finden Sie unter Material Design.

Gleichzeitig geöffnete Dokumente und Aktivitäten auf dem Bildschirm „Letzte“

In früheren Versionen konnte auf dem Bildschirm „Letzte“ nur eine Aufgabe für jede App angezeigt werden, mit der der Nutzer zuletzt interagiert hat. Ihre App kann jetzt bei Bedarf mehr Aufgaben öffnen, um zusätzliche parallele Aktivitäten für Dokumente auszuführen. Diese Funktion erleichtert das Multitasking, da Nutzer auf dem Bildschirm mit den zuletzt verwendeten Dokumenten schnell zwischen einzelnen Aktivitäten und Dokumenten wechseln können. So ist der Wechsel in allen Apps einheitlich. Beispiele für solche parallelen Aufgaben sind geöffnete Tabs in einer Browser-App, Dokumente in einer Produktivitäts-App, parallele Spiele oder Chats in einer Messaging-App. Ihre App kann ihre Aufgaben über die ActivityManager.AppTask-Klasse verwalten.

Wenn Sie eine logische Pause einfügen möchten, damit das System Ihre Aktivität als neue Aufgabe behandelt, verwenden Sie FLAG_ACTIVITY_NEW_DOCUMENT, wenn Sie die Aktivität mit startActivity() starten. Setzen Sie dazu das Attribut documentLaunchMode des Elements <activity> in Ihrem Manifest auf "intoExisting" oder "always".

Damit der Bildschirm „Zuletzt verwendet“ nicht überladen wird, können Sie die maximale Anzahl von Aufgaben aus Ihrer App festlegen, die auf diesem Bildschirm angezeigt werden dürfen. Legen Sie dazu das <application>-Attribut android:maxRecents fest. Derzeit können maximal 50 Aufgaben pro Nutzer angegeben werden (25 für Geräte mit wenig RAM).

Aufgaben auf dem Bildschirm „Letzte“ können so eingestellt werden, dass sie nach einem Neustart erhalten bleiben. Verwenden Sie das Attribut android:persistableMode, um das Speicherverhalten zu steuern. Sie können auch die visuellen Eigenschaften einer Aktivität auf dem Bildschirm „Letzte Aktivitäten“ ändern, z. B. die Farbe, das Label und das Symbol der Aktivität. Rufen Sie dazu die Methode setTaskDescription() auf.

WebView-Updates

Die WebView-Implementierung wird unter Android 5.0 auf Chromium M37 aktualisiert. Dadurch werden Sicherheits- und Stabilitätsverbesserungen sowie Fehlerkorrekturen vorgenommen. Der Standard-User-Agent-String für einen WebView, der unter Android 5.0 ausgeführt wird, wurde aktualisiert und enthält jetzt die Versionsnummer 37.0.0.0.

In diesem Release wird die Klasse PermissionRequest eingeführt, mit der deine App der WebView die Berechtigung erteilen kann, über Web-APIs wie getUserMedia() auf geschützte Ressourcen wie Kamera und Mikrofon zuzugreifen. Deine App muss die entsprechenden Android-Berechtigungen für diese Ressourcen haben, um die Berechtigungen für WebView zu erteilen.

Mit der neuen Methode onShowFileChooser() können Sie jetzt ein Eingabeformularfeld in WebView verwenden und eine Dateiauswahl starten, um Bilder und Dateien vom Android-Gerät auszuwählen.

Außerdem unterstützt dieser Release die offenen Standards WebAudio, WebGL und WebRTC. Weitere Informationen zu den neuen Funktionen, die in diesem Release enthalten sind, finden Sie unter WebView für Android.

Bildschirmaufnahme und -freigabe

Mit Android 5.0 können Sie Ihrer App mit den neuen android.media.projection APIs Funktionen zum Aufzeichnen und Teilen des Bildschirms hinzufügen. Diese Funktion ist beispielsweise nützlich, wenn Sie die Bildschirmfreigabe in einer Videokonferenz-App aktivieren möchten.

Mit der neuen Methode createVirtualDisplay() kann Ihre App den Inhalt des Hauptbildschirms (Standardanzeige) in einem Surface-Objekt erfassen, das dann über das Netzwerk gesendet werden kann. Die API ermöglicht nur die Aufnahme nicht sicherer Bildschirminhalte und nicht der Aufnahme von Systemaudio. Bevor Ihre App mit der Bildschirmaufzeichnung beginnen kann, muss sie die Berechtigung des Nutzers anfordern. Dazu wird ein Dialogfeld für die Bildschirmaufzeichnung mit einem Intent geöffnet, das über die Methode createScreenCaptureIntent() abgerufen wurde.

Ein Beispiel für die Verwendung der neuen APIs finden Sie in der MediaProjectionDemo-Klasse im Beispielprojekt.

Benachrichtigungen

Benachrichtigungen auf dem Sperrbildschirm

Auf Sperrbildschirmen unter Android 5.0 können Benachrichtigungen angezeigt werden. Nutzer können in den Einstellungen festlegen, ob vertrauliche Benachrichtigungsinhalte auf einem sicheren Sperrbildschirm angezeigt werden dürfen.

Deine App kann den Detaillierungsgrad festlegen, der sichtbar ist, wenn ihre Benachrichtigungen über dem sicheren Sperrbildschirm angezeigt werden. Rufen Sie setVisibility() auf und geben Sie einen der folgenden Werte an, um die Sichtbarkeit zu steuern:

  • VISIBILITY_PRIVATE: Zeigt grundlegende Informationen wie das Symbol der Benachrichtigung an, aber verbirgt den vollständigen Inhalt der Benachrichtigung.
  • VISIBILITY_PUBLIC: Der vollständige Inhalt der Benachrichtigung wird angezeigt.
  • VISIBILITY_SECRET: Es wird nichts angezeigt, auch nicht das Symbol der Benachrichtigung.

Wenn die Sichtbarkeitsstufe VISIBILITY_PRIVATE ist, können Sie auch eine Version des Inhalts der Mitteilung zur Verfügung stellen, in der personenbezogene Daten entfernt wurden. Eine SMS-App kann beispielsweise eine Benachrichtigung mit der Meldung „Sie haben drei neue Textnachrichten“ anzeigen, aber den Inhalt und die Absender der Nachricht ausblenden. Wenn du diese alternative Benachrichtigung senden möchtest, musst du zuerst die Ersatzbenachrichtigung mit Notification.Builder erstellen. Wenn Sie das private Benachrichtigungsobjekt erstellen, hängen Sie die Ersatzbenachrichtigung über die Methode setPublicVersion() an dieses an.

Metadaten für Benachrichtigungen

Android 5.0 nutzt Metadaten, die mit Ihren App-Benachrichtigungen verknüpft sind, um die Benachrichtigungen intelligenter zu sortieren. Rufen Sie zum Festlegen der Metadaten die folgenden Methoden in Notification.Builder auf, wenn Sie die Benachrichtigung erstellen:

  • setCategory(): Gibt an, wie das System mit Ihren App-Benachrichtigungen umgehen soll, wenn sich das Gerät im Modus Priorität befindet (z. B. wenn eine Benachrichtigung einen eingehenden Anruf, eine Instant-Nachricht oder einen Wecker darstellt).
  • setPriority(): Die Benachrichtigung wird als wichtiger oder weniger wichtig als normale Benachrichtigungen markiert. Benachrichtigungen, für die das Prioritätsfeld auf PRIORITY_MAX oder PRIORITY_HIGH festgelegt ist, werden in einem kleinen schwebenden Fenster angezeigt, wenn die Benachrichtigung auch einen Ton oder eine Vibration auslöst.
  • addPerson(): Sie können eine oder mehrere Personen hinzufügen, die für eine Benachrichtigung relevant sind. Ihre App kann damit dem System signalisieren, dass Benachrichtigungen von den angegebenen Personen gruppiert oder als wichtiger eingestuft werden sollen.

Grafik

Unterstützung für OpenGL ES 3.1

Android 5.0 bietet jetzt auch Java-Schnittstellen und native Unterstützung für OpenGL ES 3.1. Zu den wichtigsten neuen Funktionen von OpenGL ES 3.1 gehören:

  • Compute Shader
  • Shader-Objekte trennen
  • Indirekte Zeichenbefehle
  • Multisample- und Stencil-Texturen
  • Verbesserte Spracheinfärbung
  • Erweiterungen für erweiterte Überblendungsmodi und Fehlerbehebung
  • Abwärtskompatibilität mit OpenGL ES 2.0 und 3.0

Die Java-Schnittstelle für OpenGL ES 3.1 unter Android wird mit GLES31 bereitgestellt. Wenn du OpenGL ES 3.1 verwendest, musst du ihn in deiner Manifestdatei mit dem Tag <uses-feature> und dem Attribut android:glEsVersion deklarieren. Beispiel:

<manifest>
    <uses-feature android:glEsVersion="0x00030001" />
    ...
</manifest>

Weitere Informationen zur Verwendung von OpenGL ES sowie dazu, wie Sie die unterstützte OpenGL ES-Version des Geräts zur Laufzeit prüfen, finden Sie im Leitfaden zur OpenGL ES API.

Android Extension Pack

Neben OpenGL ES 3.1 bietet diese Version ein Erweiterungspaket mit Java-Schnittstellen und nativer Unterstützung für erweiterte Grafikfunktionen. Diese Erweiterungen werden von Android als einzelnes Paket behandelt. Wenn die Erweiterung ANDROID_extension_pack_es31a vorhanden ist, kann Ihre App davon ausgehen, dass alle Erweiterungen im Paket vorhanden sind, und die Shading Language-Features mit einer einzigen #extension-Anweisung aktivieren.

Das Erweiterungspaket unterstützt:

  • Garantierte Fragment-Shader-Unterstützung für Shader-Speicherpuffer, Bilder und Atome (Fragment-Shader-Unterstützung ist in OpenGL ES 3.1 optional.)
  • Tessellation- und Geometrie-Shader
  • ASTC-Texturkomprimierungsformat (LDR)
  • Interpolation und Schattierung pro Stichprobe
  • Verschiedene Mischmodi für jeden Farbanhang in einem Frame-Zwischenspeicher

Die Java-Schnittstelle für das Erweiterungspaket wird mit GLES31Ext bereitgestellt. In deinem App-Manifest kannst du deklarieren, dass deine App nur auf Geräten installiert werden darf, die das Erweiterungspaket unterstützen. Beispiel:

<manifest>
    <uses-feature android:name=“android.hardware.opengles.aep”
        android:required="true" />
    ...
</manifest>

Medien

Camera API für erweiterte Kamerafunktionen

Mit Android 5.0 wird die neue API android.hardware.camera2 eingeführt, die eine feinkörnige Fotoaufnahme und Bildverarbeitung ermöglicht. Sie können jetzt mit getCameraIdList() programmatisch auf die für das System verfügbaren Kamerageräte zugreifen und mit openCamera() eine Verbindung zu einem bestimmten Gerät herstellen. Erstellen Sie eine CameraCaptureSession und geben Sie die Surface-Objekte an, an die erfasste Bilder gesendet werden sollen, um mit der Aufnahme von Bildern zu beginnen. Die CameraCaptureSession kann so konfiguriert werden, dass einzelne Aufnahmen oder mehrere Bilder in einer Serie aufgenommen werden.

Wenn Sie benachrichtigt werden möchten, wenn neue Bilder erfasst werden, müssen Sie den CameraCaptureSession.CaptureCallback-Listener implementieren und in der Aufnahmeanfrage festlegen. Wenn das System nun die Anfrage zur Bilderfassung abgeschlossen hat, empfängt der CameraCaptureSession.CaptureCallback-Listener einen Aufruf an onCaptureCompleted(), der Ihnen die Bilderfassungsmetadaten in einem CaptureResult bereitstellt.

Mit der Klasse CameraCharacteristics kann Ihre App ermitteln, welche Kamerafunktionen auf einem Gerät verfügbar sind. Die Eigenschaft INFO_SUPPORTED_HARDWARE_LEVEL des Objekts gibt die Funktionalität der Kamera an.

Informationen zur Verwendung der aktualisierten Camera API finden Sie in den Implementierungsbeispielen Camera2Basic und Camera2Video in dieser Version.

Audiowiedergabe

Diese Version enthält die folgenden Änderungen an AudioTrack:

  • Ihre App kann jetzt Audiodaten im Gleitkommaformat (ENCODING_PCM_FLOAT) bereitstellen. Dies ermöglicht einen größeren Dynamikbereich, eine gleichmäßigere Präzision und einen größeren Headroom. Die Gleitkommaarithmetik ist besonders bei Zwischenberechnungen nützlich. Wiedergabeendpunkte verwenden das Ganzzahlformat für Audiodaten und eine niedrigere Bittiefe. In Android 5.0 sind Teile der internen Pipeline noch keine Gleitkommazahl.
  • Ihre App kann jetzt Audiodaten als ByteBuffer im selben Format wie von MediaCodec bereitgestellt bereitstellen.
  • Die Option WRITE_NON_BLOCKING kann das Zwischenspeichern und Multithreading für einige Anwendungen vereinfachen.

Medienwiedergabesteuerung

Mit den neuen Benachrichtigungs- und Medien-APIs können Sie dafür sorgen, dass die Systemoberfläche über die Medienwiedergabe informiert ist und Albumcover extrahieren und anzeigen kann. Mit den neuen Klassen MediaSession und MediaController lässt sich die Medienwiedergabe über eine UI und einen Dienst steuern.

Die neue MediaSession-Klasse ersetzt die verworfene RemoteControlClient-Klasse und bietet einen einzelnen Satz von Callback-Methoden für die Verarbeitung von Transportsteuerelementen und Medienschaltflächen. Wenn deine App die Medienwiedergabe ermöglicht und auf der Android TV- oder Wear-Plattform ausgeführt wird, verwende die MediaSession-Klasse, um die Übertragungssteuerung mit denselben Callback-Methoden zu verarbeiten.

Mit der neuen Klasse MediaController können Sie jetzt Ihre eigene Mediencontroller-App erstellen. Diese Klasse bietet eine threadsichere Möglichkeit, die Medienwiedergabe über den UI-Prozess Ihrer App zu überwachen und zu steuern. Geben Sie beim Erstellen eines Controllers ein MediaSession.Token-Objekt an, damit Ihre App mit dem angegebenen MediaSession interagieren kann. Mit den MediaController.TransportControls-Methoden können Sie Befehle wie play(), stop(), skipToNext() und setRating() senden, um die Medienwiedergabe in dieser Sitzung zu steuern. Mit dem Controller können Sie auch ein MediaController.Callback-Objekt registrieren, um auf Metadaten und Statusänderungen in der Sitzung zu warten.

Außerdem können Sie mit der neuen Notification.MediaStyle-Klasse umfassende Benachrichtigungen erstellen, die die Wiedergabesteuerung an eine Mediensitzung gebunden lassen.

Medien durchsuchen

Android 5.0 bietet Apps die Möglichkeit, über die neue API android.media.browse die Medieninhaltsbibliothek einer anderen App zu durchsuchen. Wenn Sie die Medieninhalte in Ihrer App freigeben möchten, erweitern Sie die Klasse MediaBrowserService. Ihre Implementierung von MediaBrowserService sollte Zugriff auf einen MediaSession.Token gewähren, damit Apps Medieninhalte abspielen können, die über Ihren Dienst bereitgestellt werden.

Verwenden Sie die Klasse MediaBrowser, um mit einem Media-Browser-Dienst zu interagieren. Geben Sie den Komponentennamen für eine MediaSession an, wenn Sie eine MediaBrowser-Instanz erstellen. Über diese Browserinstanz kann Ihre Anwendung dann eine Verbindung zum zugehörigen Dienst herstellen und ein MediaSession.Token-Objekt abrufen, um über diesen Dienst bereitgestellte Inhalte wiederzugeben.

Speicher

Verzeichnisauswahl

Android 5.0 erweitert das Storage Access Framework, sodass Nutzer eine vollständige Verzeichnisstruktur auswählen können. Apps erhalten so Lese-/Schreibzugriff auf alle enthaltenen Dokumente, ohne dass für jedes Element eine Bestätigung durch den Nutzer erforderlich ist.

Wenn Sie einen Verzeichnisunterbaum auswählen möchten, erstellen und senden Sie eine OPEN_DOCUMENT_TREE-Intent. Das System zeigt alle DocumentsProvider-Instanzen an, die die Auswahl von Unterbäumen unterstützen. Der Nutzer kann dann ein Verzeichnis suchen und auswählen. Der zurückgegebene URI stellt den Zugriff auf die ausgewählte Unterstruktur dar. Anschließend können Sie buildChildDocumentsUriUsingTree() und buildDocumentUriUsingTree() zusammen mit query() verwenden, um die Unterstruktur zu untersuchen.

Mit der neuen Methode createDocument() können Sie an beliebiger Stelle unter der Unterstruktur neue Dokumente oder Verzeichnisse erstellen. Verwenden Sie renameDocument() und deleteDocument(), um vorhandene Dokumente zu verwalten. Prüfen Sie unter COLUMN_FLAGS, ob Ihr Anbieter diese Anrufe unterstützt, bevor Sie sie senden.

Wenn Sie eine DocumentsProvider implementieren und die Unterstrukturauswahl unterstützen möchten, implementieren Sie isChildDocument() und fügen Sie FLAG_SUPPORTS_IS_CHILD in Ihre COLUMN_FLAGS ein.

Android 5.0 führt außerdem neue paketspezifische Verzeichnisse im freigegebenen Speicher ein, in denen Ihre App Mediendateien für die Aufnahme in MediaStore ablegen kann. Das neue getExternalMediaDirs() gibt Pfade zu diesen Verzeichnissen auf allen gemeinsam genutzten Speichergeräten zurück. Ähnlich wie bei getExternalFilesDir() sind für Ihre Anwendung keine weiteren Berechtigungen erforderlich, um auf die zurückgegebenen Pfade zuzugreifen. Die Plattform sucht regelmäßig in diesen Verzeichnissen nach neuen Medien. Du kannst aber auch MediaScannerConnection verwenden, um explizit nach neuen Inhalten zu suchen.

Drahtlose Übertragung und Konnektivität

Mehrere Netzwerkverbindungen

Android 5.0 bietet neue Multi-Netzwerk-APIs, mit denen Ihre App verfügbare Netzwerke mit bestimmten Funktionen dynamisch suchen und eine Verbindung zu ihnen herstellen kann. Diese Funktion ist nützlich, wenn für Ihre App ein spezielles Netzwerk wie ein SUPL-, MMS- oder Mobilfunkabrechnungsnetzwerk erforderlich ist oder wenn Sie Daten mit einem bestimmten Transportprotokoll senden möchten.

So wählen Sie ein Netzwerk über Ihre App dynamisch aus und stellen eine Verbindung zu ihm her:

  1. Erstellen Sie ein ConnectivityManager.
  2. Verwenden Sie die Klasse NetworkRequest.Builder, um ein NetworkRequest-Objekt zu erstellen und die Netzwerkfunktionen und den Transporttyp anzugeben, für die Ihre App verwendet werden soll.
  3. Rufen Sie zum Suchen nach geeigneten Netzwerken requestNetwork() oder registerNetworkCallback() auf und übergeben Sie das Objekt NetworkRequest sowie eine Implementierung von ConnectivityManager.NetworkCallback. Verwenden Sie die Methode requestNetwork(), wenn Sie nach der Erkennung aktiv zu einem geeigneten Netzwerk wechseln möchten. Wenn Sie nur Benachrichtigungen für gescannte Netzwerke erhalten möchten, ohne aktiv wechseln zu müssen, verwenden Sie stattdessen die Methode registerNetworkCallback().

Wenn das System ein geeignetes Netzwerk erkennt, stellt es eine Verbindung zum Netzwerk her und ruft den onAvailable()-Callback auf. Du kannst das Network-Objekt aus dem Rückruf verwenden, um zusätzliche Informationen zum Netzwerk zu erhalten oder den Traffic an das ausgewählte Netzwerk weiterzuleiten.

Bluetooth Low Energy

Mit Android 4.3 wurde die Plattformunterstützung für Bluetooth Low Energy (Bluetooth LE) eingeführt. Unter Android 5.0 kann ein Android-Gerät jetzt als Bluetooth LE-Peripheriegerät fungieren. Apps können diese Funktion nutzen, um ihre Präsenz für Geräte in der Nähe bekannt zu machen. Beispielsweise können Sie Apps erstellen, mit denen ein Gerät als Schrittzähler oder Gesundheitsüberwachungsgerät fungiert und seine Daten an ein anderes Bluetooth LE-Gerät übertragen kann.

Mit den neuen android.bluetooth.le APIs können Ihre Apps Werbung senden, nach Antworten suchen und Verbindungen zu Bluetooth LE-Geräten in der Nähe herstellen. Wenn Sie die neuen Werbe- und Scanfunktionen verwenden möchten, fügen Sie Ihrem Manifest die Berechtigung BLUETOOTH_ADMIN hinzu. Wenn Nutzer Ihre App im Play Store aktualisieren oder herunterladen, werden sie gebeten, Ihrer App die folgende Berechtigung zu erteilen: „Bluetooth-Verbindungsinformationen: Ermöglicht der App, die Bluetooth-Verbindung zu steuern, einschließlich des Sendens von Informationen an Bluetooth-Geräte in der Nähe oder des Abrufens von Informationen über Bluetooth-Geräte in der Nähe.“

Rufe startAdvertising() auf und übergib eine Implementierung der AdvertiseCallback-Klasse, um mit der Werbung über Bluetooth LE zu beginnen, damit andere Geräte deine App erkennen können. Das Callback-Objekt erhält einen Bericht über den Erfolg oder Misserfolg des Werbevorgangs.

In Android 5.0 wird die Klasse ScanFilter eingeführt, damit deine App nur nach bestimmten Gerätetypen suchen kann, an denen sie interessiert ist. Wenn Sie nach Bluetooth LE-Geräten suchen möchten, rufen Sie startScan() auf und übergeben Sie eine Liste von Filtern. Im Methodenaufruf müssen Sie auch eine Implementierung von ScanCallback bereitstellen, um zu melden, wenn ein Bluetooth LE-Advertising gefunden wurde.

NFC-Optimierungen

Android 5.0 fügt diese Verbesserungen hinzu, um eine breitere und flexiblere Nutzung von NFC zu ermöglichen:

  • Android Beam ist jetzt im Menü Teilen verfügbar.
  • Ihre App kann Android Beam auf dem Gerät des Nutzers durch Aufrufen von invokeBeam() aufrufen, um Daten freizugeben. So muss der Nutzer das Gerät nicht manuell an ein anderes NFC-fähiges Gerät halten, um die Datenübertragung abzuschließen.
  • Mit der neuen Methode createTextRecord() können Sie einen NDEF-Eintrag mit UTF-8-Textdaten erstellen.
  • Wenn Sie eine Zahlungs-App entwickeln, können Sie jetzt eine NFC-Anwendungs-ID (AID) dynamisch registrieren, indem Sie registerAidsForService() aufrufen. Mit setPreferredService() kannst du auch den bevorzugten Dienst zur Kartenemulation festlegen, der verwendet werden soll, wenn eine bestimmte Aktivität im Vordergrund ausgeführt wird.

Project Volta

Neben den neuen Funktionen bietet Android 5.0 auch Verbesserungen der Akkulaufzeit. Mit den neuen APIs und dem Tool können Sie den Energieverbrauch Ihrer App analysieren und optimieren.

Jobs planen

Android 5.0 bietet eine neue JobScheduler API, mit der Sie die Akkulaufzeit optimieren können, indem Sie Jobs für das System definieren, die asynchron zu einem späteren Zeitpunkt oder unter bestimmten Bedingungen ausgeführt werden sollen (z. B. wenn das Gerät geladen wird). Die Jobplanung ist in folgenden Situationen nützlich:

  • Die App enthält Arbeiten, die nicht für Nutzer sichtbar sind und die Sie verschieben können.
  • Die App enthält Vorgänge, die Sie ausführen möchten, wenn das Gerät angeschlossen ist.
  • Für die App ist eine Aufgabe erforderlich, für die ein Netzwerkzugriff oder eine WLAN-Verbindung erforderlich ist.
  • Die Anwendung enthält eine Reihe von Aufgaben, die Sie als Batch nach einem regelmäßigen Zeitplan ausführen möchten.

Eine Arbeitseinheit wird von einem JobInfo-Objekt eingeschlossen. Dieses Objekt gibt die Planungskriterien an.

Mit der Klasse JobInfo.Builder können Sie konfigurieren, wie die geplante Aufgabe ausgeführt werden soll. Sie können die Aufgabe so planen, dass sie unter bestimmten Bedingungen ausgeführt wird, z. B.:

  • Starten, wenn das Gerät geladen wird
  • Starten, wenn das Gerät mit einem unbegrenzten Netzwerk verbunden ist
  • Starten, wenn das Gerät inaktiv ist
  • Sie müssen vor einer bestimmten Frist oder mit einer minimalen Verzögerung abgeschlossen werden.

Sie können beispielsweise Code wie diesen hinzufügen, um Ihre Aufgabe in einem unbegrenzten Netzwerk auszuführen:

Kotlin

val uploadTask: JobInfo = JobInfo.Builder(
        jobId,
        serviceComponent /* JobService component */
).run {
    setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
    build()
}
val jobScheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
jobScheduler.schedule(uploadTask)

Java

JobInfo uploadTask = new JobInfo.Builder(jobId,
                                         serviceComponent /* JobService component */)
        .setRequiredNetworkCapabilities(JobInfo.NETWORK_TYPE_UNMETERED)
        .build();
JobScheduler jobScheduler =
        (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(uploadTask);

Wenn das Gerät stabil mit Strom versorgt wird (d. h., es ist seit mehr als zwei Minuten angeschlossen und der Akku ist in einem guten Zustand), führt das System alle geplanten Jobs aus, die zur Ausführung bereit sind, auch wenn der Termin für den Job noch nicht abgelaufen ist.

Ein Beispiel für die Verwendung der JobScheduler API finden Sie im JobSchedulerSample-Implementierungsbeispiel in diesem Release.

Entwicklertools zur Akkunutzung

Der neue Befehl dumpsys batterystats generiert interessante statistische Daten zur Akkunutzung auf einem Gerät, sortiert nach eindeutiger Nutzer-ID (UID). Die Statistiken umfassen:

  • Verlauf der akkubezogenen Ereignisse
  • Globale Statistiken für das Gerät
  • Ungefährer Stromverbrauch pro UID und Systemkomponente
  • Mobile ms pro Paket pro App
  • Aggregierte Statistiken nach System-UID
  • Zusammengefasste App-UID-Statistiken

Mit der Option --help können Sie die verschiedenen Optionen zur Anpassung der Ausgabe kennenlernen. Wenn Sie beispielsweise Statistiken zur Akkunutzung für ein bestimmtes App-Paket seit dem letzten Laden des Geräts ausgeben möchten, führen Sie den folgenden Befehl aus:

$ adb shell dumpsys batterystats --charged <package-name>

Sie können das Tool Battery Historian auf die Ausgabe des Befehls dumpsys anwenden, um eine HTML-Visualisierung der Energieereignisse aus den Logs zu generieren. Anhand dieser Informationen können Sie Akkuprobleme leichter nachvollziehen und diagnostizieren.

Android am Arbeitsplatz und im Bildungsbereich

Verwaltete Bereitstellung

Android 5.0 bietet neue Funktionen für das Ausführen von Apps in einer Unternehmensumgebung. Ein Geräteadministrator kann einen verwalteten Bereitstellungsprozess initiieren, um einem Gerät ein gleichzeitig vorhandenes, aber separates verwaltetes Profil hinzuzufügen, wenn der Nutzer bereits ein privates Konto hat. Apps, die mit verwalteten Profilen verknüpft sind, werden neben nicht verwalteten Apps im Launcher, auf dem Bildschirm „Letzte Apps“ und in den Benachrichtigungen des Nutzers angezeigt.

Senden Sie ACTION_PROVISION_MANAGED_PROFILE in einer Intent, um den Prozess für die verwaltete Bereitstellung zu starten. Wenn der Aufruf erfolgreich ist, löst das System den onProfileProvisioningComplete()-Callback aus. Sie können dann setProfileEnabled() anrufen, um dieses verwaltete Profil zu aktivieren.

Standardmäßig ist nur ein kleiner Teil der Apps im verwalteten Profil aktiviert. Sie können zusätzliche Apps im verwalteten Profil installieren, indem Sie enableSystemApp() aufrufen.

Wenn Sie eine Launcher-App entwickeln, können Sie mit der neuen Klasse LauncherApps eine Liste der startbaren Aktivitäten für den aktuellen Nutzer und alle zugehörigen verwalteten Profile abrufen. Der Launcher kann die verwalteten Apps optisch hervorheben, indem dem Symbol ein Arbeitssymbol hinzugefügt wird. Rufen Sie getUserBadgedIcon() auf, um das Badge-Symbol abzurufen.

Informationen zur Verwendung der neuen Funktion finden Sie im Implementierungsbeispiel BasicManagedProfile in diesem Release.

Geräteeigentümer

Android 5.0 bietet die Möglichkeit, eine Geräteeigentümer-App bereitzustellen. Ein Geräteeigentümer ist eine spezielle Art von Geräteadministrator, der zusätzlich die Möglichkeit hat, sekundäre Nutzer zu erstellen und zu entfernen sowie globale Einstellungen auf dem Gerät zu konfigurieren. Die App des Geräteeigentümers kann die Methoden in der Klasse DevicePolicyManager verwenden, um die Konfiguration, Sicherheit und Apps auf verwalteten Geräten detailliert zu steuern. Ein Gerät kann immer nur einen aktiven Geräteinhaber haben.

Zum Bereitstellen und Aktivieren eines Geräteinhabers müssen Sie eine NFC-Datenübertragung von einer Programmier-App zum Gerät durchführen, während das Gerät nicht bereitgestellt ist. Bei dieser Datenübertragung werden die gleichen Informationen wie im Bereitstellungs-Intent gesendet, der unter Verwaltete Bereitstellung beschrieben wird.

Bildschirm anpinnen

Mit Android 5.0 wird eine neue API zum Anpinnen des Bildschirms eingeführt, mit der Sie Nutzer vorübergehend daran hindern können, Ihre Aufgabe zu verlassen oder von Benachrichtigungen unterbrochen zu werden. Das ist beispielsweise nützlich, wenn Sie eine Bildungs-App entwickeln, die die Anforderungen für die Prüfung auf Android-Geräten erfüllt, oder eine Einzel- oder Kiosk-App. Sobald deine App die Bildschirmfixierung aktiviert hat, können Nutzer weder Benachrichtigungen sehen noch auf andere Apps zugreifen oder zum Startbildschirm zurückkehren, bis deine App den Modus beendet.

Es gibt zwei Möglichkeiten, die Bildschirmfixierung zu aktivieren:

  • Manuell: Nutzer können die Bildschirmfixierung unter Einstellungen > Sicherheit > Bildschirmfixierung aktivieren und die Aufgaben auswählen, die sie anpinnen möchten, indem sie auf dem Bildschirm „Zuletzt verwendet“ auf das grüne Stecknadelsymbol tippen.
  • Programmatisch:Wenn Sie die Bildschirmfixierung programmatisch aktivieren möchten, rufen Sie in Ihrer App startLockTask() auf. Wenn die anfragende App kein Geräteeigentümer ist, wird der Nutzer zur Bestätigung aufgefordert. Eine App des Geräteeigentümers kann die Methode setLockTaskPackages() aufrufen, damit Apps ohne Bestätigung durch den Nutzer angepinnt werden können.

Wenn die Aufgabensperre aktiv ist, geschieht Folgendes:

  • Die Statusleiste ist leer und Nutzerbenachrichtigungen und Statusinformationen sind ausgeblendet.
  • Die Schaltflächen „Startbildschirm“ und „Zuletzt verwendete Apps“ sind ausgeblendet.
  • Andere Apps können keine neuen Aktivitäten starten.
  • Die aktuelle App kann neue Aktivitäten starten, sofern dadurch keine neuen Aufgaben erstellt werden.
  • Wenn die Bildschirmfixierung von einem Geräteeigentümer aktiviert wird, bleibt der Nutzer an deine App gebunden, bis die App stopLockTask() aufruft.
  • Wenn die Bildschirmansichtssperre von einer anderen App aktiviert wird, die nicht der Geräteeigentümer ist, oder direkt vom Nutzer, kann er sie beenden, indem er die Schaltflächen „Zurück“ und „Letzte Apps“ gedrückt hält.

Druck-Framework

PDF als Bitmap rendern

Mit der neuen Klasse PdfRenderer können Sie Seiten von PDF-Dokumenten jetzt zu Bitmap-Bildern für den Druck rendern. Sie müssen eine suchbare ParcelFileDescriptor angeben, in die das System den druckbaren Inhalt schreibt. Das heißt, auf den Inhalt kann zufällig zugegriffen werden. Ihre App kann eine Seite zum Rendern mit openPage() abrufen und dann render() aufrufen, um die geöffnete PdfRenderer.Page in eine Bitmap umzuwandeln. Sie können auch zusätzliche Parameter festlegen, wenn Sie nur einen Teil des Dokuments in ein Bitmapbild konvertieren möchten, z. B. um gekacheltes Rendering zum Heranzoomen des Dokuments zu implementieren.

Ein Beispiel für die Verwendung der neuen APIs findest du im Beispiel PdfRendererBasic.

System

App-Nutzungsstatistiken

Mit der neuen android.app.usage API kannst du jetzt auf einem Android-Gerät auf den App-Nutzungsverlauf zugreifen. Diese API bietet detailliertere Informationen zur Nutzung als die eingestellte Methode getRecentTasks(). Wenn Sie diese API verwenden möchten, müssen Sie zuerst die Berechtigung "android.permission.PACKAGE_USAGE_STATS" in Ihrem Manifest deklarieren. Der Nutzer muss außerdem den Zugriff für diese App unter Einstellungen > Sicherheit > Apps mit Nutzungszugriff aktivieren.

Das System erfasst die Nutzungsdaten pro App und aggregiert sie in täglichen, wöchentlichen, monatlichen und jährlichen Intervallen. Die maximale Dauer, für die diese Daten im System gespeichert werden, ist:

  • Tagesdaten: 7 Tage
  • Wöchentliche Daten: 4 Wochen
  • Monatliche Daten: 6 Monate
  • Jährliche Daten: 2 Jahre

Für jede App zeichnet das System die folgenden Daten auf:

  • Das letzte Mal, als die App verwendet wurde
  • Die Gesamtdauer der App im Vordergrund für dieses Zeitintervall (nach Tag, Woche, Monat oder Jahr)
  • Zeitstempel erfassen, wenn eine Komponente (identifiziert durch einen Paket- und Aktivitätsnamen) im Laufe eines Tages in den Vordergrund oder Hintergrund verschoben wurde
  • Zeitstempel, der erfasst wird, wenn sich die Gerätekonfiguration ändert (z. B. wenn sich die Geräteausrichtung durch Drehen ändert)

Tests und Barrierefreiheit

Verbesserungen bei Tests und Bedienungshilfen

Android 5.0 bietet folgende Unterstützung für Tests und Barrierefreiheit:

  • Mit den neuen Methoden getWindowAnimationFrameStats() und getWindowContentFrameStats() werden Frame-Statistiken für Fensteranimationen und -inhalte erfasst. Mit diesen Methoden können Sie Instrumentierungstests schreiben, um zu bewerten, ob eine App Frames mit einer ausreichenden Aktualisierungshäufigkeit rendert, um eine reibungslose Nutzererfahrung zu ermöglichen.
  • Mit der neuen Methode executeShellCommand() können Sie Shell-Befehle über Ihren Instrumentierungstest ausführen. Die Befehlsausführung ähnelt der Ausführung von adb shell auf einem Host, der mit dem Gerät verbunden ist, sodass Sie Shell-basierte Tools wie dumpsys, am, content und pm verwenden können.
  • Bedienungshilfen und Testtools, die Bedienungshilfen-APIs (z. B. UiAutomator) verwenden, können jetzt detaillierte Informationen zu den Eigenschaften von Fenstern auf dem Bildschirm abrufen, mit denen sehende Nutzer interagieren können. Wenn Sie eine Liste von AccessibilityWindowInfo-Objekten abrufen möchten, rufen Sie die neue Methode getWindows() auf.
  • Mit der neuen Klasse AccessibilityNodeInfo.AccessibilityAction können Sie Standard- oder benutzerdefinierte Aktionen für AccessibilityNodeInfo definieren. Die neue Klasse AccessibilityNodeInfo.AccessibilityAction ersetzt die aktionsbezogenen APIs, die zuvor in AccessibilityNodeInfo zu finden waren.
  • Android 5.0 bietet eine detailliertere Steuerung der Text-to-Speech-Synthese in Ihrer App. Mit der neuen Klasse Voice kann Ihre App Sprachprofile verwenden, die mit bestimmten Sprachen, Qualitäts- und Latenzbewertungen sowie Text-to-Speech-Engine-spezifischen Parametern verknüpft sind.

IME

Einfacherer Wechsel zwischen Eingabesprachen

Ab Android 5.0 können Nutzer leichter zwischen allen von der Plattform unterstützten Eingabemethodeneditoren (IMEs) wechseln. Durch Ausführen der festgelegten Wechselaktion (in der Regel Tippen auf ein Globussymbol auf der Soft-Tastatur) werden alle diese IMEs nacheinander aufgerufen. Diese Verhaltensänderung wird durch die Methode shouldOfferSwitchingToNextInputMethod() implementiert.

Außerdem prüft das Framework jetzt, ob der nächste IME überhaupt einen Schaltmechanismus enthält (und somit auch, ob dieser IME den Wechsel zu einem späteren IME unterstützt). Ein IME mit einem Wechselmechanismus wird nicht zu einem IME ohne Wechsel geschaltet. Diese Verhaltensänderung wird durch die Methode switchToNextInputMethod() implementiert.

Ein Beispiel für die Verwendung der aktualisierten APIs zum Wechseln der Eingabemethode finden Sie im aktualisierten Beispiel für die Implementierung der Soft-Tastatur in dieser Version. Weitere Informationen zum Umschalten zwischen Eingabemethoden finden Sie unter Eingabemethode erstellen.

Manifestdeklarationen

Erforderliche deklarative Funktionen

Die folgenden Werte werden jetzt im Element <uses-feature> unterstützt. So können Sie dafür sorgen, dass Ihre App nur auf Geräten installiert wird, die die für Ihre App erforderlichen Funktionen bieten.

Nutzerberechtigungen

Die folgende Berechtigung wird jetzt im Element <uses-permission> unterstützt, um die Berechtigungen zu deklarieren, die Ihre App für den Zugriff auf bestimmte APIs benötigt.

  • BIND_DREAM_SERVICE: Wenn Sie das API-Level 21 oder höher anstreben, ist diese Berechtigung für einen Daydream-Dienst erforderlich, damit nur das System eine Bindung herstellen kann.