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 aufPRIORITY_MAX
oderPRIORITY_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.
- Alle Geräte unterstützen mindestens die Hardwareebene
INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY
, deren Funktionen ungefähr denen der verworfenenCamera
API entsprechen. - Geräte, die die
INFO_SUPPORTED_HARDWARE_LEVEL_FULL
-Hardwareebene unterstützen, können Erfassung und Nachbearbeitung manuell steuern und hochauflösende Bilder mit hohen Framerates aufnehmen.
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 vonMediaCodec
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.
Datenspeicher
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 ausstellst.
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:
- Erstellen Sie ein
ConnectivityManager
. - Verwenden Sie die Klasse
NetworkRequest.Builder
, um einNetworkRequest
-Objekt zu erstellen und die Netzwerkfeatures und den Transporttyp für Ihre App anzugeben. - Um nach geeigneten Netzwerken zu suchen, rufen Sie
requestNetwork()
oderregisterNetworkCallback()
auf und übergeben Sie dasNetworkRequest
-Objekt und eine Implementierung vonConnectivityManager.NetworkCallback
. Verwenden Sie die MethoderequestNetwork()
, 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 MethoderegisterNetworkCallback()
.
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 auchsetPreferredService()
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 MethodesetLockTaskPackages()
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()
undgetWindowContentFrameStats()
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 vonadb shell
über einen Host, der mit dem Gerät verbunden ist, sodass Sie Shell-basierte Tools wiedumpsys
,am
,content
undpm
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 MethodegetWindows()
auf, um eine Liste vonAccessibilityWindowInfo
-Objekten abzurufen. - Mit der neuen
AccessibilityNodeInfo.AccessibilityAction
-Klasse können Sie Standard- oder benutzerdefinierte Aktionen definieren, die für eineAccessibilityNodeInfo
ausgeführt werden sollen. Die neueAccessibilityNodeInfo.AccessibilityAction
-Klasse ersetzt die aktionsbezogenen APIs, die zuvor inAccessibilityNodeInfo
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.
FEATURE_AUDIO_OUTPUT
FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING
FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR
FEATURE_CAMERA_CAPABILITY_RAW
FEATURE_CAMERA_LEVEL_FULL
FEATURE_GAMEPAD
FEATURE_LIVE_TV
FEATURE_MANAGED_USERS
FEATURE_LEANBACK
FEATURE_OPENGLES_EXTENSION_PACK
FEATURE_SECURELY_REMOVES_USERS
FEATURE_SENSOR_AMBIENT_TEMPERATURE
FEATURE_SENSOR_HEART_RATE_ECG
FEATURE_SENSOR_RELATIVE_HUMIDITY
FEATURE_VERIFIED_BOOT
FEATURE_WEBVIEW
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.