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 bereits eine App veröffentlicht hast, solltest du dir die Verhaltensänderungen unter Android 5.0 ansehen, die du in deiner App berücksichtigen solltest. Diese Änderungen können sich auf deine App auf Geräten mit Android 5.0 auswirken, auch wenn du keine neuen APIs verwendest oder keine Ausrichtung auf neue Funktionen vornimmst.

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

Hier gehts los

Wenn Sie Apps für Android 5.0 erstellen möchten, müssen Sie zuerst das Android SDK herunterladen. Laden Sie dann mithilfe des SDK-Managers die Android 5.0 SDK-Plattform und die Systemimages 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 Android 5.0-System-Image, teste sie und veröffentliche die aktualisierte App mit dieser Änderung.

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

Weitere Informationen zur Funktionsweise von API-Levels finden Sie unter Was ist ein API-Level?

Wichtige Verhaltensänderungen

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

Umfassende Informationen finden Sie unter Änderungen bei Android 5.0.

Benutzeroberfläche

Material Design-Support

Android 5.0 unterstützt den neuen Android-Stil Material Design. Sie können Apps mit Material Design erstellen, die visuell dynamisch sind und Übergänge von UI-Elementen haben, die sich für Nutzer natürlich anfühlen. Dieser Support umfasst Folgendes:

  • „Material Theme“
  • Schatten anzeigen
  • Das RecyclerView-Widget
  • Drawable-Animations- und Stileffekte
  • Effekte für die Material Design-Animation und -Übergänge
  • Animatoren für Ansichtseigenschaften basierend auf dem Status der Ansicht
  • Anpassbare UI-Widgets und App-Leisten mit Farbpaletten, die Sie steuern können
  • Animierte und nicht animierte Drawables, die auf XML-Vektorgrafiken basieren

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

Gleichzeitige Dokumente und Aktivitäten auf dem Bildschirm „Letzte“

In früheren Versionen konnte auf dem Bildschirm „Zuletzt“ nur eine Aufgabe für jede App angezeigt werden, mit der der Nutzer zuletzt interagiert hat. Jetzt kann Ihre Anwendung bei Bedarf weitere Aufgaben für zusätzliche gleichzeitige Aktivitäten für Dokumente öffnen. Diese Funktion erleichtert Multitasking, da Nutzer auf dem Bildschirm „Zuletzt verwendet“ schnell zwischen einzelnen Aktivitäten und Dokumenten wechseln können. Der Wechsel zwischen Apps ist dabei konsistent. Beispiele für solche gleichzeitigen Aufgaben sind geöffnete Tabs in einer Webbrowser-Anwendung, Dokumente in einer Produktivitäts-Anwendung, gleichzeitige Spiele in einem Spiel oder Chats in einer Messaging-Anwendung. Ihre Anwendung kann ihre Aufgaben über die ActivityManager.AppTask-Klasse verwalten.

Wenn Sie eine logische Unterbrechung 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. Du kannst dieses Verhalten auch erhalten, indem du das Attribut documentLaunchMode des <activity>-Elements in deinem Manifest auf "intoExisting" oder "always" setzt.

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 können. Legen Sie dazu das Attribut <application> android:maxRecents fest. Derzeit können maximal 50 Aufgaben pro Nutzer angegeben werden (25 bei Geräten mit wenig RAM).

Sie können für Aufgaben im Bildschirm „Letzte“ festlegen, dass sie auch nach einem Neustart bestehen bleiben. Mit dem Attribut android:persistableMode können Sie das Persistenzverhalten steuern. Mit der Methode setTaskDescription() können Sie auch die visuellen Eigenschaften einer Aktivität auf dem Bildschirm „Letzte“ ändern, z. B. Farbe, Label und Symbol.

WebView-Updates

Unter Android 5.0 wird die WebView-Implementierung auf Chromium M37 aktualisiert. Das bringt Sicherheits- und Stabilitätsverbesserungen sowie Fehlerkorrekturen. Der Standard-User-Agent-String für eine WebView unter Android 5.0 wurde aktualisiert und enthält nun 37.0.0.0 als Versionsnummer.

Mit diesem Release wird die Klasse PermissionRequest eingeführt, mit der deine App über Web-APIs wie getUserMedia() die Berechtigung WebView für den Zugriff auf geschützte Ressourcen wie die Kamera und das Mikrofon gewähren kann. Deine App muss die entsprechenden Android-Berechtigungen für diese Ressourcen haben, um dem WebView die Berechtigungen gewähren zu können.

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 auch die offenen Standards WebAudio, WebGL und WebRTC. Weitere Informationen zu den neuen Funktionen in diesem Release finden Sie unter WebView für Android.

Bildschirmaufnahme und -freigabe

Unter Android 5.0 kannst du deiner App mit den neuen android.media.projection APIs Funktionen zur Bildschirmaufnahme und Bildschirmfreigabe 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 deine App den Inhalt des Hauptbildschirms (Standardanzeige) in einem Surface-Objekt erfassen, das deine App dann über das Netzwerk senden kann. Mit der API können nur nicht sichere Bildschirminhalte und keine Systemaudioinhalte aufgezeichnet werden. Um mit der Bildschirmaufnahme zu beginnen, muss deine App zuerst die Berechtigung des Nutzers anfordern. Dazu wird ein Dialogfeld zur Bildschirmaufnahme 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 Klasse MediaProjectionDemo 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 über einem sicheren Sperrbildschirm angezeigt werden dürfen.

Ihre App kann die Detailebene festlegen, die sichtbar ist, wenn die Benachrichtigungen über dem sicheren Sperrbildschirm angezeigt werden. Rufen Sie zum Steuern der Sichtbarkeit setVisibility() auf und geben Sie einen der folgenden Werte an:

  • VISIBILITY_PRIVATE: Zeigt grundlegende Informationen wie das Benachrichtigungssymbol an, blendet jedoch den vollständigen Inhalt der Benachrichtigung aus.
  • VISIBILITY_PUBLIC: Zeigt den vollständigen Inhalt der Benachrichtigung an.
  • VISIBILITY_SECRET: Es wird nichts angezeigt, auch nur das Benachrichtigungssymbol.

Wenn die Sichtbarkeitsstufe VISIBILITY_PRIVATE ist, kannst du auch eine entfernte Version des Benachrichtigungsinhalts zur Verfügung stellen, in der personenbezogene Details verborgen sind. Beispielsweise kann eine SMS-Anwendung die Benachrichtigung „Du hast drei neue SMS“ anzeigen, aber den Inhalt und die Absender der Nachricht ausblenden. Wenn du diese alternative Benachrichtigung bereitstellen 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.

Metadaten für Benachrichtigungen

Unter Android 5.0 werden die mit deinen App-Benachrichtigungen verknüpften Metadaten verwendet, 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(): Teilt dem System mit, wie es mit App-Benachrichtigungen umgehen soll, wenn sich das Gerät im Prioritätsmodus befindet, z. B. wenn eine Benachrichtigung einen eingehenden Anruf, eine Sofortnachricht oder einen Alarm darstellt.
  • setPriority(): Die Benachrichtigung wird als wichtiger oder weniger wichtig als normale Benachrichtigungen markiert. Benachrichtigungen, bei denen das Prioritätsfeld auf PRIORITY_MAX oder PRIORITY_HIGH gesetzt ist, erscheinen in einem kleinen unverankerten Fenster, wenn die Benachrichtigung auch Ton oder Vibration aufweist.
  • addPerson(): ermöglicht Ihnen, eine oder mehrere Personen hinzuzufügen, die für eine Benachrichtigung relevant sind. Ihre App kann dies verwenden, um dem System zu signalisieren, dass sie Benachrichtigungen von den angegebenen Personen gruppieren soll, oder um Benachrichtigungen von diesen Personen als wichtiger einzustufen.

Grafik

Unterstützung für OpenGL ES 3.1

Android 5.0 bietet zusätzlich Java-Schnittstellen und native Unterstützung für OpenGL ES 3.1. Die wichtigsten neuen Funktionen von OpenGL ES 3.1:

  • Compute-Shader
  • Shader-Objekte trennen
  • Indirekte Zeichenbefehle
  • Multisample- und Schablonentexturen
  • Verbesserungen bei der Schattierung
  • Erweiterungen für erweiterte Mischmodi und die 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 es in deiner Manifestdatei mit dem Tag <uses-feature> und dem Attribut android:glEsVersion deklarieren. Beispiele:

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

Weitere Informationen zur Verwendung von OpenGL ES und zum Prüfen der unterstützten OpenGL ES-Version des Geräts zur Laufzeit finden Sie in der OpenGL ES API-Anleitung.

Android-Erweiterungspaket

Zusätzlich zu OpenGL ES 3.1 bietet dieser Release 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 Features für die Schattierungssprache mit einer einzigen #extension-Anweisung aktivieren.

Das Erweiterungspaket unterstützt:

  • Garantierte Fragment-Shader-Unterstützung für Shader-Speicherzwischenspeicher, Bilder und Atomare. Die Fragment-Shader-Unterstützung ist in OpenGL ES 3.1 optional.
  • Tessellations- und Geometrie-Shader
  • ASTC (LDR)-Texturkomprimierungsformat
  • 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 angeben, dass deine App nur auf Geräten installiert werden darf, die das Erweiterungspaket unterstützen. Beispiele:

<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 android.hardware.camera2 API eingeführt, die die Aufnahme feiner Aufnahmen und die Bildverarbeitung erleichtert. Sie können jetzt programmatisch auf die Kamerageräte zugreifen, die für das System mit getCameraIdList() verfügbar sind, und mit openCamera() eine Verbindung zu einem bestimmten Gerät herstellen. Um mit der Aufnahme von Bildern zu beginnen, erstellen Sie eine CameraCaptureSession und geben Sie die Surface-Objekte an, die aufgenommen werden sollen. CameraCaptureSession kann für einzelne Aufnahmen oder mehrere Bilder in einer Bilderserie konfiguriert werden.

Wenn Sie benachrichtigt werden möchten, wenn neue Bilder erfasst werden, implementieren Sie den Listener CameraCaptureSession.CaptureCallback und legen Sie ihn in der Erfassungsanfrage fest. Wenn das System die Anfrage zur Bildaufnahme abgeschlossen hat, empfängt der Listener CameraCaptureSession.CaptureCallback einen Aufruf von onCaptureCompleted() und stellt Ihnen die Metadaten der Bilderfassung in einem CaptureResult zur Verfügung.

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

Informationen zur Verwendung der aktualisierten Camera-API finden Sie in den Implementierungsbeispielen für Camera2Basic und Camera2Video in diesem Release.

Audiowiedergabe

Dieser Release enthält die folgenden Änderungen an AudioTrack:

  • Ihre App kann jetzt Audiodaten im Gleitkommaformat (ENCODING_PCM_FLOAT) bereitstellen. Dies ermöglicht einen größeren dynamischen Bereich, eine konsistentere Präzision und einen größeren Toleranzbereich. Die Gleitkommaarithmetik ist besonders bei Zwischenberechnungen nützlich. Wiedergabeendpunkte verwenden das Ganzzahlformat für Audiodaten mit niedrigerer Bittiefe. In Android 5.0 sind Teile der internen Pipeline noch keine Gleitkommazahl.
  • Deine App kann jetzt Audiodaten als ByteBuffer bereitstellen, und zwar in demselben Format, das von MediaCodec bereitgestellt wird.
  • Die Option WRITE_NON_BLOCKING kann das Zwischenspeichern und Multithreading für einige Anwendungen vereinfachen.

Medienwiedergabesteuerung

Verwende die neuen Benachrichtigungs- und Medien-APIs, damit die System-UI deine Medienwiedergabe erkennt und Albumcover extrahieren und anzeigen kann. Mit den neuen Klassen MediaSession und MediaController lässt sich die Medienwiedergabe über eine UI und einen Dienst jetzt noch einfacher steuern.

Die neue MediaSession-Klasse ersetzt die verworfene RemoteControlClient-Klasse und bietet eine einzelne Gruppe von Callback-Methoden für die Handhabung von Transportsteuerungen und Medienschaltflächen. Wenn Ihre App die Medienwiedergabe ermöglicht und auf der Android TV- oder Wear-Plattform ausgeführt wird, verwenden Sie die Klasse MediaSession, um Ihre Transportsteuerungen mit denselben Callback-Methoden zu verarbeiten.

Sie können jetzt mit der neuen Klasse MediaController eine eigene Mediencontroller-App erstellen. Diese Klasse bietet eine Thread-sichere Möglichkeit, die Medienwiedergabe über den UI-Prozess Ihrer App zu überwachen und zu steuern. Gib beim Erstellen eines Controllers ein MediaSession.Token-Objekt an, damit die App mit dem angegebenen MediaSession interagieren kann. Mit den Methoden MediaController.TransportControls 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.

Darüber hinaus können Sie umfassende Benachrichtigungen erstellen, um die Wiedergabesteuerung mit der neuen Notification.MediaStyle-Klasse an eine Mediensitzung gebunden zu machen.

Mediensuche

Mit Android 5.0 können Apps über die neue API android.media.browse die Medienbibliothek einer anderen App durchsuchen. Erweitern Sie die Klasse MediaBrowserService, um die Medieninhalte in Ihrer App verfügbar zu machen. Ihre Implementierung von MediaBrowserService sollte Zugriff auf ein MediaSession.Token bieten, damit Apps über Ihren Dienst bereitgestellte Medieninhalte wiedergeben können.

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

Speicher

Verzeichnisauswahl

Android 5.0 erweitert das Storage Access Framework so, dass Nutzer eine ganze Verzeichnisunterstruktur auswählen können. Dadurch erhalten Apps Lese-/Schreibzugriff auf alle enthaltenen Dokumente, ohne dass der Nutzer für jedes Element eine Bestätigung benötigt.

Zum Auswählen einer Verzeichnisunterstruktur erstellen und senden Sie einen OPEN_DOCUMENT_TREE-Intent. Das System zeigt alle DocumentsProvider-Instanzen an, die die Unterstrukturauswahl unterstützen, sodass der Nutzer ein Verzeichnis suchen und auswählen kann. Der zurückgegebene URI stellt den Zugriff auf die ausgewählte Unterstruktur dar. Sie können dann buildChildDocumentsUriUsingTree() und buildDocumentUriUsingTree() zusammen mit query() verwenden, um die Unterstruktur zu erkunden.

Mit der neuen Methode createDocument() können Sie an beliebiger Stelle unter der Unterstruktur neue Dokumente oder Verzeichnisse erstellen. Verwenden Sie zum Verwalten vorhandener Dokumente renameDocument() und deleteDocument(). Prüfe COLUMN_FLAGS, um den Anbietersupport für diese Aufrufe zu prüfen, bevor du sie ausgibst.

Wenn Sie eine DocumentsProvider implementieren und die Auswahl der Unterstruktur unterstützen möchten, müssen Sie isChildDocument() implementieren und FLAG_SUPPORTS_IS_CHILD in die COLUMN_FLAGS-Datei einfügen.

Mit Android 5.0 wurden außerdem neue paketspezifische Verzeichnisse im freigegebenen Speicher eingeführt, in denen deine App Mediendateien für die Aufnahme in MediaStore ablegen kann. Die neue getExternalMediaDirs() gibt Pfade zu diesen Verzeichnissen auf allen gemeinsam genutzten Speichergeräten zurück. Ähnlich wie bei getExternalFilesDir() benötigt Ihre Anwendung keine zusätzlichen Berechtigungen, um auf die zurückgegebenen Pfade zuzugreifen. Die Plattform sucht in diesen Verzeichnissen regelmäßig nach neuen Medien. Sie können aber auch MediaScannerConnection verwenden, um explizit nach neuen Inhalten zu suchen.

WLAN & Konnektivität

Mehrere Netzwerkverbindungen

Android 5.0 bietet neue Multi-Netzwerk-APIs, mit denen deine App dynamisch nach verfügbaren Netzwerken mit bestimmten Funktionen 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 Abrechnungsnetzwerk erforderlich ist oder wenn Sie Daten über eine bestimmte Art von Transportprotokoll senden möchten.

So wählen Sie ein Netzwerk aus Ihrer App dynamisch aus und stellen eine Verbindung her:

  1. Erstellen Sie ein ConnectivityManager.
  2. Verwenden Sie die Klasse NetworkRequest.Builder, um ein NetworkRequest-Objekt zu erstellen und die Netzwerkfeatures und den Transporttyp für Ihre App anzugeben.
  3. Um nach geeigneten Netzwerken zu suchen, rufen Sie requestNetwork() oder registerNetworkCallback() auf und übergeben Sie das NetworkRequest-Objekt und eine Implementierung von ConnectivityManager.NetworkCallback. Verwenden Sie die Methode requestNetwork(), wenn Sie aktiv zu einem geeigneten Netzwerk wechseln möchten, sobald es erkannt wird. Wenn Sie nur Benachrichtigungen für gescannte Netzwerke erhalten möchten, ohne aktiv zu wechseln, 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. Mit dem Network-Objekt aus dem Callback können Sie zusätzliche Informationen über das Netzwerk abrufen oder Traffic an das ausgewählte Netzwerk weiterleiten.

Bluetooth Low Energy

Mit Android 4.3 wurde die Plattformunterstützung für Bluetooth Low Energy (Bluetooth LE) in der zentralen Rolle eingeführt. Mit Android 5.0 kann ein Android-Gerät jetzt als Bluetooth LE-Peripheriegerät genutzt werden. Apps können diese Funktion nutzen, um Geräte in der Nähe über ihre Anwesenheit zu informieren. Sie können beispielsweise Apps entwickeln, mit denen ein Gerät als Schrittzähler oder Gesundheitsüberwachung genutzt werden kann und mit denen Daten mit einem anderen Bluetooth LE-Gerät kommuniziert werden können.

Mit den neuen android.bluetooth.le APIs können Ihre Apps Werbung übertragen, nach Antworten suchen und Verbindungen mit Bluetooth LE-Geräten in der Nähe herstellen. Fügen Sie Ihrem Manifest die Berechtigung BLUETOOTH_ADMIN hinzu, um die neuen Werbe- und Scanfunktionen zu verwenden. Wenn Nutzer Ihre App aus dem Play Store aktualisieren oder herunterladen, werden sie aufgefordert, Ihrer App die folgende Berechtigung zu erteilen: "Informationen zur Bluetooth-Verbindung: Ermöglicht der App, Bluetooth zu steuern, einschließlich der Übertragung von Informationen an Bluetooth-Geräte in der Nähe oder dem Abrufen von Informationen über Bluetooth-Geräte in der Nähe."

Um mit Bluetooth LE-Werbung zu beginnen, damit andere Geräte Ihre App erkennen können, rufen Sie startAdvertising() auf und übergeben Sie eine Implementierung der AdvertiseCallback-Klasse. 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. Um mit der Suche nach Bluetooth LE-Geräten zu beginnen, rufen Sie startScan() auf und übergeben Sie eine Liste mit Filtern. Im Methodenaufruf müssen Sie auch eine Implementierung von ScanCallback bereitstellen, um zu melden, wenn ein Bluetooth LE-Advertising gefunden wird.

NFC-Verbesserungen

Unter Android 5.0 wurden diese Verbesserungen vorgenommen, 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 aufrufen, um Daten durch Aufrufen von invokeBeam() zu teilen. Dadurch 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 du eine Zahlungs-App entwickelst, kannst du jetzt durch Aufrufen von registerAidsForService() eine NFC-Anwendungs-ID (AID) dynamisch registrieren. Du kannst auch setPreferredService() verwenden, um den bevorzugten Kartenemulationsdienst festzulegen, der verwendet werden soll, wenn eine bestimmte Aktivität im Vordergrund ausgeführt wird.

Projekt Volta

Neben neuen Funktionen wurde bei Android 5.0 auch die Akkulaufzeit verbessert. Mit den neuen APIs und dem neuen Tool können Sie den Stromverbrauch Ihrer App analysieren und optimieren.

Jobs planen

Android 5.0 bietet eine neue JobScheduler API, mit der du die Akkulaufzeit optimieren kannst. Dazu legst du Jobs fest, die das System zu einem späteren Zeitpunkt oder unter bestimmten Bedingungen (z. B. beim Aufladen des Geräts) asynchron ausführen kann. Die Jobplanung ist in folgenden Situationen nützlich:

  • Die App enthält Aufgaben, die nicht für Nutzer sichtbar sind und die Sie aufschieben können.
  • Die App bietet Ihnen die gewünschten Aktionen, wenn das Gerät angeschlossen ist.
  • Die App hat eine Aufgabe, die Netzwerkzugriff oder eine WLAN-Verbindung erfordert.
  • Die Anwendung enthält eine Reihe von Aufgaben, die Sie regelmäßig als Batch ausführen möchten.

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

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

  • Starten, wenn das Gerät aufgeladen wird
  • Starten, wenn das Gerät mit einem kostenlosen Netzwerk verbunden ist
  • Bei Inaktivität starten
  • Vor Ablauf einer bestimmten Frist oder mit einer Mindestverzögerung abschließen

Sie können beispielsweise Code wie den folgenden hinzufügen, um Ihre Aufgabe in einem kostenlosen 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 konstant mit Strom versorgt wird (d. h., es war länger als 2 Minuten angeschlossen und der Akku hat einen fehlerfreien Zustand), führt das System jeden geplanten Job aus, der zur Ausführung bereit ist, auch wenn die Frist für den Job noch nicht abgelaufen ist.

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

Entwicklertools für die Akkunutzung

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

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

Mit der Option --help erfahren Sie mehr über die verschiedenen Optionen zum Anpassen der Ausgabe. Wenn Sie beispielsweise Statistiken zur Akkunutzung für ein bestimmtes App-Paket seit dem letzten Aufladen 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 in der Ausgabe des Befehls dumpsys verwenden, um eine HTML-Visualisierung der energiebezogenen Ereignisse aus den Logs zu generieren. Diese Informationen erleichtern es Ihnen, Probleme mit dem Akku zu verstehen und zu diagnostizieren.

Android am Arbeitsplatz und in der Bildung

Verwaltete Bereitstellung

Android 5.0 bietet neue Funktionen zum Ausführen von Anwendungen in einer Unternehmensumgebung. Ein Geräteadministrator kann einen verwalteten Bereitstellungsprozess initiieren, um einem Gerät ein Copräsentes, 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 „Zuletzt verwendet“ und in den Benachrichtigungen des Nutzers angezeigt.

Senden Sie ACTION_PROVISION_MANAGED_PROFILE in einem Intent, um den verwalteten Bereitstellungsprozess zu starten. Wenn der Aufruf erfolgreich ist, löst das System den Callback onProfileProvisioningComplete() aus. Anschließend können Sie setProfileEnabled() aufrufen, um dieses verwaltete Profil zu aktivieren.

Standardmäßig ist nur ein kleiner Teil der Apps im verwalteten Profil aktiviert. Du kannst enableSystemApp() aufrufen, um weitere Apps im verwalteten Profil zu installieren.

Wenn Sie eine Launcher-App entwickeln, können Sie mit der neuen LauncherApps-Klasse eine Liste der startbaren Aktivitäten für den aktuellen Nutzer und alle zugehörigen verwalteten Profile abrufen. Ihr Launcher kann die verwalteten Apps visuell hervorheben, indem er ein Arbeitskennzeichen an das Symbol Drawable anfügt. 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

Mit Android 5.0 wird die Möglichkeit geboten, eine Geräteinhaber-App bereitzustellen. Ein Geräteinhaber 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. Ihre Geräteinhaber-App kann die Methoden in der DevicePolicyManager-Klasse verwenden, um Konfiguration, Sicherheit und Apps auf verwalteten Geräten genau 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 auf das Gerät ausführen, wenn sich das Gerät nicht bereitgestellt befindet. Bei der 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 zur Bildschirmfixierung eingeführt, mit der du vorübergehend verhindern kannst, dass Nutzer deine Aufgabe verlassen oder durch Benachrichtigungen unterbrochen werden. Das ist beispielsweise der Fall, wenn du eine Bildungs-App entwickelst, die anspruchsvolle Prüfungsanforderungen für Android unterstützt, oder eine zweckgebundene oder Kioskanwendung. Nachdem die Bildschirmfixierung in deiner App aktiviert wurde, können Nutzer erst dann Benachrichtigungen sehen, auf andere Apps zugreifen oder zum Startbildschirm zurückkehren, wenn die App den Modus beendet hat.

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

  • Manuell:Nutzer können die Bildschirmfixierung unter Einstellungen > Sicherheit > Bildschirmfixierung aktivieren und durch Tippen auf das grüne Stecknadelsymbol auf dem Bildschirm „Zuletzt verwendet“ die Aufgaben auswählen, die sie anpinnen möchten.
  • Programmatisch:Um die Bildschirmfixierung programmatisch zu aktivieren, rufen Sie startLockTask() aus Ihrer App auf. Wenn die anfragende App kein Geräteeigentümer ist, wird der Nutzer zur Bestätigung aufgefordert. Eine Geräteinhaber-App kann die Methode setLockTaskPackages() aufrufen, damit Apps ohne den Bestätigungsschritt des Nutzers 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 Anwendung kann neue Aktivitäten starten, solange dadurch keine neuen Aufgaben erstellt werden.
  • Wenn die Bildschirmfixierung von einem Geräteinhaber aufgerufen wird, bleibt der Nutzer so lange an deine App gebunden, bis die App stopLockTask() aufruft.
  • Wenn die Bildschirmfixierung von einer anderen App aktiviert wird, die kein Geräteeigentümer ist, oder vom Nutzer direkt, kann der Nutzer sie beenden, indem er die Schaltflächen „Zurück“ und „Zuletzt verwendet“ gedrückt hält.

Drucksystem

PDF als Bitmap rendern

Mit der neuen Klasse PdfRenderer können Sie jetzt PDF-Dokumentseiten zum Drucken in Bitmapbilder rendern. Sie müssen eine ParcelFileDescriptor angeben, auf die nach dem Zufallsprinzip zugegriffen werden kann und auf die das System die druckbaren Inhalte schreibt. Ihre App kann eine Seite zum Rendern mit openPage() abrufen und dann render() aufrufen, um das 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 Kachel-Rendering zu implementieren, um das Dokument heranzuzoomen.

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

System

App-Nutzungsstatistiken

Du kannst jetzt mit der neuen android.app.usage API auf den App-Nutzungsverlauf auf einem Android-Gerät zugreifen. Diese API bietet detailliertere Nutzungsinformationen als die eingestellte getRecentTasks()-Methode. Wenn du diese API verwenden möchtest, musst du zuerst die Berechtigung "android.permission.PACKAGE_USAGE_STATS" in deinem Manifest deklarieren. Der Nutzer muss den Zugriff für diese App auch über Einstellungen > Sicherheit > Apps mit Zugriff auf Nutzungsdaten aktivieren.

Das System erhebt die Nutzungsdaten auf App-Basis und aggregiert die Daten in täglichen, wöchentlichen, monatlichen und jährlichen Intervallen. Die maximale Dauer, die das System diese Daten speichert, beträgt:

  • Tägliche Daten: 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:

  • Der Zeitpunkt der letzten Nutzung der App
  • Die Gesamtdauer der Zeit, in der die App in diesem Zeitintervall im Vordergrund ausgeführt wurde (pro Tag, Woche, Monat oder Jahr).
  • Zeitstempelerfassung, wenn eine Komponente (durch einen Paket- und Aktivitätsnamen identifiziert) im Laufe eines Tages in den Vordergrund oder Hintergrund verschoben wurde
  • Zeitstempel, der erfasst, wenn sich eine Gerätekonfiguration geändert hat (z. B. wenn sich die Geräteausrichtung aufgrund der Rotation geändert hat)

Tests und Bedienungshilfen

Tests und Verbesserungen der Bedienungshilfen

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

  • Die neuen Methoden getWindowAnimationFrameStats() und getWindowContentFrameStats() erfassen Framestatistiken für Fensteranimationen und -inhalte. Mit diesen Methoden können Sie Instrumentierungstests schreiben, um zu bewerten, ob eine App Frames mit einer ausreichenden Aktualisierungshäufigkeit rendert, um für eine reibungslose Nutzererfahrung zu sorgen.
  • Mit der neuen Methode executeShellCommand() können Sie Shell-Befehle aus Ihrem Instrumentierungstest ausführen. Die Befehlsausführung ähnelt dem Ausführen von adb shell über einen 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 wie UiAutomator verwenden, können jetzt detaillierte Informationen zu den Eigenschaften von Fenstern auf dem Bildschirm abrufen, mit denen sehende Nutzer interagieren können. Rufen Sie die neue Methode getWindows() auf, um eine Liste von AccessibilityWindowInfo-Objekten abzurufen.
  • Mit der neuen AccessibilityNodeInfo.AccessibilityAction-Klasse können Sie Standard- oder benutzerdefinierte Aktionen definieren, die für eine AccessibilityNodeInfo ausgeführt werden sollen. Die neue AccessibilityNodeInfo.AccessibilityAction-Klasse ersetzt die aktionsbezogenen APIs, die zuvor in AccessibilityNodeInfo gefunden wurden.
  • Mit Android 5.0 können Sie die Synthese der Sprachausgabe in Ihrer App präziser steuern. Mit der neuen Klasse Voice kann Ihre App Sprachprofile verwenden, die mit bestimmten Sprachen, Qualitäts- und Latenzbewertungen sowie spezifischen Parametern der Sprachausgabe verknüpft sind.

IME

Einfacherer Wechsel zwischen den Eingabesprachen

Ab Android 5.0 können Nutzer leichter zwischen allen von der Plattform unterstützten Eingabemethoden-Editoren (IME) wechseln. Wenn Sie die vorgesehene Wechselaktion ausführen (in der Regel ein Globussymbol auf der Softtastatur berühren), werden alle diese IMEs durchlaufen. Diese Verhaltensänderung wird durch die Methode shouldOfferSwitchingToNextInputMethod() implementiert.

Darüber hinaus prüft das Framework jetzt, ob der nächste IME überhaupt einen Wechselmechanismus enthält (und somit, ob dieser IME den Wechsel zum IME unterstützt). Eine IMEI mit einem Wechselmechanismus wird nicht zu einem IME ohne diesen wechseln. Diese Verhaltensänderung wird durch die Methode switchToNextInputMethod() implementiert.

Ein Beispiel für die Verwendung der aktualisierten APIs zum Wechseln von IME finden Sie im aktualisierten Implementierungsbeispiel für die Softtastatur in diesem Release. Weitere Informationen zum Implementieren des Wechsels zwischen IMEs finden Sie unter Eingabemethode erstellen.

Manifestdeklarationen

Deklarierbare erforderliche Funktionen

Die folgenden Werte werden jetzt im Element <uses-feature> unterstützt, damit deine App nur auf Geräten installiert wird, die die Funktionen bieten, die für deine App erforderlich sind.

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: Bei Ausrichtung auf API-Level 21 und höher ist diese Berechtigung für einen Daydream-Dienst erforderlich, damit nur das System eine Verbindung herstellen kann.