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 aufPRIORITY_MAX
oderPRIORITY_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.
- Alle Geräte unterstützen mindestens die
INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY
-Hardwarestufe, deren Funktionen ungefähr denen der verworfenenCamera
API entsprechen. - Geräte, die die
INFO_SUPPORTED_HARDWARE_LEVEL_FULL
-Hardwareebene unterstützen, können die Erfassung und Nachverarbeitung manuell steuern und hochauflösende Bilder bei hohen Framerates erfassen.
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 vonMediaCodec
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:
- Erstellen Sie ein
ConnectivityManager
. - Verwenden Sie die Klasse
NetworkRequest.Builder
, um einNetworkRequest
-Objekt zu erstellen und die Netzwerkfunktionen und den Transporttyp anzugeben, für die Ihre App verwendet werden soll. - Rufen Sie zum Suchen nach geeigneten Netzwerken
requestNetwork()
oderregisterNetworkCallback()
auf und übergeben Sie das ObjektNetworkRequest
sowie eine Implementierung vonConnectivityManager.NetworkCallback
. Verwenden Sie die MethoderequestNetwork()
, 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 MethoderegisterNetworkCallback()
.
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. MitsetPreferredService()
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 MethodesetLockTaskPackages()
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()
undgetWindowContentFrameStats()
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 vonadb shell
auf einem 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 (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 vonAccessibilityWindowInfo
-Objekten abrufen möchten, rufen Sie die neue MethodegetWindows()
auf. - Mit der neuen Klasse
AccessibilityNodeInfo.AccessibilityAction
können Sie Standard- oder benutzerdefinierte Aktionen fürAccessibilityNodeInfo
definieren. Die neue KlasseAccessibilityNodeInfo.AccessibilityAction
ersetzt die aktionsbezogenen APIs, die zuvor inAccessibilityNodeInfo
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.
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
: 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.