APIs unter Android 5.0

API-Level: 21

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

Wenn Sie bereits eine App veröffentlicht haben, lesen Sie den Artikel Android 5.0 Behavioral Änderungen, die du in deiner App berücksichtigen solltest. Diese Verhaltensänderungen kann sich auf Ihre App auf Geräten mit Android 5.0 auswirken, auch wenn Sie keine neuen APIs verwenden. oder die Ausrichtung auf neue Funktionen.

Um einen allgemeinen Überblick über die neuen Plattformfunktionen zu erhalten, sieh dir die Android Lollipop Highlights.

Hier geht es los

Um mit der Entwicklung von Apps für Android 5.0 zu beginnen, müssen Sie zunächst das Android SDK. Verwenden Sie dann den SDK Manager. um die Android 5.0 SDK-Plattform und System-Images herunterzuladen.

Ziel-API-Level aktualisieren

Wenn Sie Ihre App für Geräte mit Android 5.0 optimieren möchten, setzen Sie targetSdkVersion auf "21", installieren Sie die App auf einem Android 5.0-System-Image, testen Sie sie und veröffentlichen Sie 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-Levels finden Sie unter Was ist eine API-Ebene?

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.

Vollständige Informationen finden Sie unter Änderungen bei Android 5.0.

Benutzeroberfläche

Unterstützung für Material Design

Android 5.0 unterstützt das neue Material Design von Android. 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. Dieser Support umfasst:

  • Das Material-Design
  • Schatten anzeigen
  • RecyclerView-Widget
  • Drehbare Animations- und Stileffekte
  • Material Design-Animationen und Aktivitätsübergangseffekte
  • Animatoren für Ansichtseigenschaften basierend auf dem Status der Ansicht
  • Anpassbare UI-Widgets und App-Leisten mit Farbpaletten, die Sie selbst steuern können
  • 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 weitere Aufgaben für zusätzliche gleichzeitige Aktivitäten für Dokumente. Diese Funktion erleichtert das Multitasking, können Nutzende schnell zwischen einzelnen Aktivitäten und Dokumenten auf dem Bildschirm „Zuletzt verwendet“ angezeigt. So kannst du in allen Apps ganz einfach zwischen den Geräten wechseln. 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. Dieses Verhalten erhalten Sie auch, indem Sie die <Aktivität> documentLaunchMode-Attribut des Elements auf "intoExisting" oder "always".

Damit der Bildschirm „Zuletzt verwendet“ nicht überladen wird, können Sie die maximale Anzahl der Aufgaben aus Ihrer App, die auf diesem Bildschirm angezeigt werden können. Dazu setzen Sie das Attribut <application> auf android:maxRecents. Der aktuelle Maximal können 50 Aufgaben pro Nutzer angegeben werden (25 bei Geräten mit wenig RAM).

Sie können festlegen, dass Aufgaben auf dem Bildschirm „Zuletzt verwendet“ auch nach einem Neustart bestehen 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 „Zuletzt verwendet“, z. B. die Farbe, das Label und das Symbol der Aktivität setTaskDescription() .

WebView-Updates

Android 5.0 aktualisiert die WebView Implementierung in Chromium M37 mit verbesserter Sicherheit und Stabilität, sowie Fehlerkorrekturen. Der Standardstring für den User-Agent WebView mit Android 5.0 hat wurde aktualisiert, um 37.0.0.0 als Versionsnummer aufzunehmen.

In diesem Release wird die Klasse PermissionRequest eingeführt. wodurch deine App die Berechtigung „WebView“ erteilen kann Zugriff auf geschützte Ressourcen wie Kamera und Mikrofon über Web-APIs z. B. getUserMedia(). Ihre App muss die entsprechenden Android-Berechtigungen für diese Ressourcen, um dem WebView

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

Außerdem wird mit dieser Version die Unterstützung der Open-Standards WebAudio, WebGL und WebRTC eingeführt. Weitere Informationen zu den neuen Funktionen in dieser Version 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 nützlich, wenn Sie beispielsweise in einem Video die Bildschirmfreigabe aktivieren möchten. Videokonferenz-App.

Mit der neuen createVirtualDisplay()-Methode kann Ihre App den Inhalt des Hauptbildschirms (das Standarddisplay) in einem Surface-Objekt erfassen, das dann über das Netzwerk gesendet werden kann. Die API ermöglicht nur die Erfassung nicht sicherer Bildschirminhalte, nicht aber 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 unter MediaProjectionDemo. im Beispielprojekt.

Benachrichtigungen

Benachrichtigungen auf dem Sperrbildschirm

Auf dem Sperrbildschirm unter Android 5.0 können Benachrichtigungen. Nutzer können in den Einstellungen festlegen, ob sie dies erlauben möchten oder nicht. werden vertrauliche Benachrichtigungsinhalte über einem sicheren Sperrbildschirm angezeigt.

Ihre App kann festlegen, welche Detailstufe 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 Sichtbarkeitsstufe zu steuern:

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

Wenn die Sichtbarkeitsstufe VISIBILITY_PRIVATE ist, können Sie auch eine Version der Benachrichtigung bereitstellen, Inhalte, in denen personenbezogene Daten verborgen bleiben. Eine SMS-App könnte beispielsweise die Benachrichtigung „Sie haben 3 neue Nachrichten“ anzeigen, aber den Inhalt der Nachrichten und die Absender ausblenden. Erstellen Sie für diese alternative Benachrichtigung zuerst den Ersatzbenachrichtigung mit Notification.Builder. Wann? das Objekt für private Benachrichtigungen erstellen, über die setPublicVersion()-Methode.

Metadaten für Benachrichtigungen

Android 5.0 verwendet 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 mehr oder weniger wichtig als normale Benachrichtigungen markiert. Benachrichtigungen, für die das Prioritätsfeld auf PRIORITY_MAX oder PRIORITY_HIGH festgelegt ist, werden in einem kleinen schwebenden Fenster angezeigt, wenn die Benachrichtigung auch einen Ton oder eine Vibration auslöst.
  • addPerson(): Sie können eine oder mehrere Personen hinzufügen, die für eine Benachrichtigung relevant sind. Ihre App kann damit dem System signalisieren, dass Benachrichtigungen von den angegebenen Personen gruppiert oder als wichtiger eingestuft werden sollen.

Grafik

Unterstützung für OpenGL ES 3.1

Android 5.0 bietet 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
  • Separate Shaderobjekte
  • Indirekte Zeichenbefehle
  • Multisample- und Stencil-Texturen
  • Verbesserungen der Schattierungssprache
  • Erweiterungen für erweiterte Mischmodi und Debugging
  • Abwärtskompatibilität mit OpenGL ES 2.0 und 3.0

Die Java-Schnittstelle für OpenGL ES 3.1 auf Android wird mit GLES31 bereitgestellt. Wenn Sie OpenGL ES 3.1 verwenden, müssen Sie Deklarieren Sie dies in Ihrer Manifest-Datei mit dem <uses-feature>-Tag und dem Attribut android:glEsVersion. Beispiel:

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

Weitere Informationen zur Verwendung von OpenGL ES, einschließlich der Möglichkeit, die unterstützte OpenGL ES-Version des Geräts zur Laufzeit zu prüfen, finden Sie im OpenGL ES API-Leitfaden.

Android-Erweiterungspaket

Zusätzlich zu OpenGL ES 3.1 bietet diese Version ein Erweiterungspaket mit Java-Oberflächen und native Unterstützung für erweiterte Grafikfunktionen. Diese -Erweiterungen werden von Android als einzelnes Paket behandelt. (Wenn die ANDROID_extension_pack_es31a Erweiterung ist vorhanden, kann deine App Davon ausgehen, dass alle Erweiterungen im Paket vorhanden sind, und die Schattierungssprache aktivieren Funktionen mit einer einzigen #extension-Anweisung.)

Das Erweiterungspaket unterstützt:

  • Garantierte Fragment-Shader-Unterstützung für Shader-Speicherpuffer, Bilder und Atomics (Fragment-Shader ist in OpenGL ES 3.1 optional.)
  • Tessellation und Geometry Shader
  • ASTC-Texturkomprimierungsformat (LDR)
  • Stichprobenbezogene Interpolation und Schattierung
  • Unterschiedliche Überblendungsmodi für jeden Farb-Anschluss in einem Frame-Buffer

Die Java-Schnittstelle für das Erweiterungspaket wird mit GLES31Ext Sie können in Ihrem App-Manifest angeben, dass Ihre 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

Kamera API für erweiterte Kamerafunktionen

Android 5.0 führt die neue android.hardware.camera2 API für die feinkörnige Aufnahme und Bildverarbeitung. Sie können jetzt auf die dem System zur Verfügung stehenden Kamerageräte mit getCameraIdList() und eine Verbindung zu einem bestimmten Gerät openCamera(). Erstelle ein CameraCaptureSession, um mit der Aufnahme von Bildern zu beginnen und geben Sie die Surface-Objekte zum Senden erfasster Bilder an. CameraCaptureSession kann so konfiguriert werden: einzelne oder mehrere Bilder in einer Bilderserie aufzunehmen.

Um benachrichtigt zu werden, wenn neue Bilder aufgenommen werden, implementieren Sie den CameraCaptureSession.CaptureCallback-Listener und legen Sie ihn in Ihrer Aufnahmeanforderung fest. Wenn das System nun das Bild vervollständigt, Aufnahmeanfrage, deine CameraCaptureSession.CaptureCallback erhält Listener einen Aufruf an onCaptureCompleted(), und stellt die Metadaten zur Bilderfassung in einer CaptureResult

Mit der Klasse CameraCharacteristics kann Ihr App erkennen, welche Kamerafunktionen auf einem Gerät verfügbar sind. Das Objekt Die Eigenschaft INFO_SUPPORTED_HARDWARE_LEVEL steht für den Funktionsumfang der Kamera.

  • Alle Geräte unterstützen mindestens die Hardwareebene INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY, die Funktionen bietet, die ungefähr denen der eingestellten Camera API entsprechen.
  • Geräte, die die INFO_SUPPORTED_HARDWARE_LEVEL_FULL-Hardwarestufe unterstützen, können manuell Kontrolle über die Erfassung und Nachverarbeitung sowie die Erfassung hochauflösender Bilder. bei hohen Frame-Rates.

Informationen zur Verwendung der aktualisierten Camera API findest du 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 für Audiodaten das Ganzzahlformat mit geringerer Bittiefe. (In Android 5.0 sind Teile der internen Pipeline noch nicht Gleitkomma.)
  • Ihre App kann jetzt Audiodaten als ByteBuffer im selben Format wie von MediaCodec bereitgestellt bereitstellen.
  • Das WRITE_NON_BLOCKING kann das Zwischenspeichern und Multithreading für einige Apps 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 Benutzeroberfläche und einen Dienst hinweg jetzt einfacher steuern.

Die neue MediaSession-Klasse ersetzt die eingestellte RemoteControlClient-Klasse und bietet eine einzige Gruppe von Rückrufmethoden für die Verarbeitung von Transportsteuerungen und Medienschaltflächen. Wenn Ihre App die Medienwiedergabe ermöglicht und auf dem Android-Gerät TV oder Wear-Plattform zu nutzen, verwenden Sie Klasse MediaSession für den Transport mit denselben Callback-Methoden erstellen.

Mit der neuen Klasse MediaController können Sie jetzt Ihre eigene Mediensteuerungs-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 der angegebenen MediaSession interagieren kann. Mit den MediaController.TransportControls-Methoden kannst du Befehle wie play(), stop(), skipToNext() und setRating() senden, um die Medienwiedergabe in dieser Sitzung zu steuern. Mit dem Controller kannst du auch Registrieren Sie ein MediaController.Callback-Objekt bei Metadaten und Statusänderungen in der Sitzung überwachen.

Außerdem können Sie mit der neuen Klasse Notification.MediaStyle Rich-Benachrichtigungen erstellen, die die Wiedergabesteuerung mit einer Mediensitzung verknüpfen.

Mediensuche

Mit Android 5.0 können Apps nun Medieninhalte durchsuchen einer anderen App über das neue android.media.browse der API erstellen. 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.

Um mit einem Medienbrowser-Dienst zu interagieren, verwenden Sie den Klasse MediaBrowser. Komponente angeben Name für ein MediaSession-Element, wenn Sie ein MediaBrowser-Instanz. Über diese Browserinstanz kann deine App dann eine Verbindung zum zugehörigen Dienst herstellen und ein MediaSession.Token-Objekt abrufen, um Inhalte abzuspielen, die über diesen Dienst bereitgestellt werden.

Speicher

Verzeichnisauswahl

Android 5.0 erweitert die Storage Access Framework Damit Nutzer eine ganze Verzeichnisstruktur auswählen können, sodass Apps Lese-/Schreibzugriff haben 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 den ausgewählten Teilbaum dar. Sie können dann buildChildDocumentsUriUsingTree() verwenden. und buildDocumentUriUsingTree() zusammen mit query() um die Unterstruktur zu erkunden.

Mit der neuen Methode createDocument() können Sie überall neue Dokumente oder Verzeichnisse erstellen unter der Unterstruktur. Verwenden Sie renameDocument() und deleteDocument(), um vorhandene Dokumente zu verwalten. COLUMN_FLAGS prüfen um den Support des Anbieters für diese Aufrufe zu überprüfen, bevor Sie sie veranlassen.

Wenn Sie eine DocumentsProvider implementieren und die Auswahl von Unterbäumen unterstützen möchten, implementieren Sie isChildDocument() und nehmen Sie FLAG_SUPPORTS_IS_CHILD in Ihre COLUMN_FLAGS auf.

Android 5.0 führt außerdem neue paketspezifische Verzeichnisse im freigegebenen Speicher ein, in denen Ihre App Mediendateien zur Aufnahme in MediaStore ablegen kann. Die neue getExternalMediaDirs() gibt Pfade zu diesen Verzeichnissen auf allen freigegebenen Speichergeräten zurück. Ähnlich wie bei getExternalFilesDir() benötigt Ihre App keine zusätzlichen Berechtigungen, 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.

Drahtlos & Konnektivität

Mehrere Netzwerkverbindungen

Android 5.0 bietet neue Multi-Netzwerk-APIs, mit denen Ihre App dynamisch nach verfügbaren Netzwerken mit bestimmten Funktionen suchen und eine Verbindung zu ihnen herzustellen. Diese Funktion ist nützlich, wenn Ihre App ein spezielles Netzwerk wie SUPL, MMS oder Mobilfunkanbieter-Abrechnungsnetzwerk erfordert, oder wenn Sie Daten mit einem bestimmten Transportprotokoll senden möchten.

So können Sie über Ihre App ein Netzwerk auswählen und eine Verbindung dazu herstellen: Schritte:

  1. Erstellen Sie ein ConnectivityManager.
  2. Verwenden Sie die Klasse NetworkRequest.Builder, um ein NetworkRequest-Objekt und geben Sie die Netzwerkfunktionen an und Mobilitätsform, für die sich Ihre App interessiert.
  3. Rufe requestNetwork() auf, um nach geeigneten Netzwerken zu suchen oder registerNetworkCallback() und übergeben Sie NetworkRequest-Objekt und eine Implementierung von ConnectivityManager.NetworkCallback. Verwenden Sie die Methode requestNetwork(), wenn du nach der Erkennung aktiv zu einem geeigneten Netzwerk wechseln möchtest; zum Empfangen von nur Benachrichtigungen für gescannte Netzwerke erhalten, ohne aktiv zu wechseln, verwenden Sie die registerNetworkCallback().

Wenn das System ein geeignetes Netzwerk erkennt, stellt es eine Verbindung zum Netzwerk her ruft die Methode onAvailable() Callback des Nutzers an. Sie können das Network-Objekt vom Callback an um zusätzliche Informationen zum Netzwerk zu erhalten oder Traffic ausgewähltes Netzwerk.

Bluetooth Low Energy

Mit Android 4.3 wurde eine Plattformunterstützung Bluetooth Low Energy (Bluetooth LE) dabei. Unter Android 5.0 kann ein Android-Gerät jetzt Sie dienen als Bluetooth LE-Peripheriegerät. Apps können diese Funktion nutzen um sie den Geräten in der Nähe bekannt zu machen. Sie können z. B. Apps erstellen, mit denen ein Gerät als Schrittzähler oder Gesundheitsüberwachungsgerät fungiert und mit einem anderen Bluetooth LE-Gerät übertragen.

Mit den neuen android.bluetooth.le APIs können deine Apps Nachrichten an alle senden Anzeigen, Suchen nach Antworten und Herstellen von Verbindungen über Bluetooth in der Nähe LE-Geräte Wenn Sie die neuen Werbe- und Scanfunktionen verwenden möchten, fügen Sie die Berechtigung BLUETOOTH_ADMIN in Ihr Manifest ein. Wenn Nutzer Ihre App im Play Store aktualisieren oder herunterladen, werden sie aufgefordert, Ihrer App die folgende Berechtigung zu erteilen: „Bluetooth-Verbindungsinformationen: Ermöglicht der App, Bluetooth zu steuern, einschließlich der Übertragung an oder des Abrufens von Informationen zu Bluetooth-Geräten in der Nähe.“

Um mit der Werbung für Bluetooth LE zu beginnen, damit andere Geräte Ihre App, rufen Sie startAdvertising() und übergeben eine Implementierung der Klasse AdvertiseCallback. Das Callback-Objekt erhält eine Meldung, ob der Werbevorgang erfolgreich war oder fehlgeschlagen ist.

Unter Android 5.0 wird die Klasse ScanFilter eingeführt, damit dass deine App nur nach den bestimmte Gerätetypen, an denen sie interessiert sind. So starten Sie die Bluetooth-Suche: LE-Geräte, startScan() anrufen und übergeben eine Liste von Filtern. Beim Methodenaufruf müssen Sie auch eine Implementierung von ScanCallback, um zu melden, Bluetooth LE-Anzeige wurde gefunden.

Verbesserungen bei NFC

Android 5.0 fügt diese Verbesserungen hinzu, um breitere Flexible Nutzung von NFC:

  • Android Beam ist jetzt im Menü Teilen verfügbar.
  • Ihre App kann Android Beam auf dem Gerät des Nutzers aufrufen, um Daten zu teilen, indem sie invokeBeam() wird angerufen. So müssen Nutzende das Gerät nicht manuell gegen ein anderes antippen. NFC-fähiges Gerät zum Abschließen der Datenübertragung.
  • Mit der neuen Methode createTextRecord() können Sie einen NDEF-Eintrag mit UTF-8-Textdaten erstellen.
  • Wenn Sie eine Zahlungs-App entwickeln, können Sie jetzt eine NFC-Anwendungs-ID (AID) dynamisch registrieren, indem Sie registerAidsForService() aufrufen. Mit setPreferredService() können Sie auch den bevorzugten Kartenemulationsdienst festlegen, der verwendet werden soll, wenn eine bestimmte Aktivität im Vordergrund ist.

Projekt Volta

Neben den neuen Funktionen bietet Android 5.0 auch Verbesserungen beim Akku Leben. Mit den neuen APIs und Tools die Leistungsfähigkeit deiner App besser nachvollziehen und optimieren konsumiert wird.

Jobs planen

Android 5.0 bietet eine neue JobScheduler Eine API, mit der Sie die Akkulaufzeit optimieren können, indem Sie Jobs definieren, die das System ausführen soll asynchron zu einem späteren Zeitpunkt oder unter bestimmten Bedingungen (z. B. wenn das Gerät wird geladen. 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.
  • In der App gibt es Aufgaben, die Sie lieber erledigen würden, wenn das Gerät angeschlossen ist.
  • Die App hat eine Aufgabe, die einen Netzwerkzugriff oder ein WLAN erfordert
  • Die App enthält eine Reihe von Aufgaben, die Sie regelmäßig als Batch ausführen möchten. ein.

Eine Arbeitseinheit wird von einem JobInfo-Objekt eingeschlossen. In diesem Objekt werden die Planungskriterien angegeben.

Verwenden Sie die Klasse JobInfo.Builder, um zu 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 aufgeladen wird
  • Starten, wenn das Gerät mit einem kostenlosen Netzwerk verbunden ist
  • Starten, wenn das Gerät inaktiv ist
  • Sie müssen vor einem bestimmten Termin oder mit einer minimalen Verzögerung abgeschlossen sein.

Sie können beispielsweise Code wie diesen hinzufügen, um Ihre Aufgabe auf einem gebührenfreies Netzwerk:

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 2 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 findest du im JobSchedulerSample-Implementierungsbeispiel in dieser Version.

Entwicklertools für Akkunutzung

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

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

Verwenden Sie die Option --help, um mehr über die verschiedenen Optionen für und die Ausgabe anpassen. Zum Beispiel, um Informationen zum Akkuverbrauch Statistiken für ein bestimmtes App-Paket seit dem letzten Aufladen des Geräts abrufen, führen Sie diese Befehl:

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

Sie können die Akkuverlauf auf die Ausgabe des Befehls dumpsys, Generierung einer HTML-Visualisierung der Energieereignisse aus den Protokollen 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 zum 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.

Um den verwalteten Bereitstellungsprozess zu starten, senden Sie ACTION_PROVISION_MANAGED_PROFILE in Intent. Wenn die erfolgreich war, löst das System den onProfileProvisioningComplete()-Callback. 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 folgenden Befehl aufrufen: enableSystemApp()

Wenn du eine Launcher-App entwickelst, kannst du die neue LauncherApps-Klasse verwenden, um eine Liste mit Aktivitäten zu erhalten, die du veröffentlichen kannst. für den aktuellen Nutzer und alle zugehörigen verwalteten Profile. Der Launcher kann die verwalteten Apps optisch hervorheben, indem dem Symbol ein Arbeitssymbol hinzugefügt wird. Rufen Sie getUserBadgedIcon() auf, um das Symbol mit dem Logo abzurufen.

Informationen zur Verwendung der neuen Funktion finden Sie im BasicManagedProfile Implementierungsbeispiel in dieser Version.

Geräteeigentümer

Mit Android 5.0 können Sie eine App für Geräteeigentümer bereitstellen. Ein Geräteeigentümer ist eine spezielle Art von Geräteadministrator, der zusätzlich sekundäre Nutzer erstellen und entfernen sowie globale Einstellungen auf dem Gerät konfigurieren kann. 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 durchführen von einer Programmier-App an das Gerät übertragen, während sich das Gerät im nicht eingerichteten Zustand befindet. Bundesstaat. Bei dieser Datenübertragung werden dieselben Informationen gesendet wie in der Bereitstellungsabsicht, die unter Verwaltete Bereitstellung beschrieben ist.

Bildschirm anpinnen

Android 5.0 führt eine neue API zur Bildschirmanpinning ein, mit der Sie vorübergehend verhindern können, dass Nutzer die Aufgabe verlassen oder von Benachrichtigungen unterbrochen werden. Dies ist beispielsweise nützlich, wenn Sie eine Bildungs-App entwickeln, die anspruchsvollen Prüfungsanforderungen unter Android, einem einzigen Zweck Kiosk-Anwendung. Sobald die Bildschirmfixierung in Ihrer App aktiviert ist, können Nutzer keine Benachrichtigungen sehen, auf andere Apps zugreifen oder zum Startbildschirm zurückkehren, bis Ihre App den Modus beendet.

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

  • Manuell:Nutzer können die Bildschirmfixierung aktivieren. Einstellungen > Sicherheit > Bildschirm anpinnen und wählen Sie die gewünschten Aufgaben aus. indem Sie auf das grüne Stecknadelsymbol auf dem Bildschirm „Zuletzt verwendet“ tippen.
  • Programmatisch:Damit wird die Bildschirmfixierung aktiviert. programmatisch aufrufen: startLockTask() aus Ihrer App. Wenn die anfragende App kein Geräteeigentümer ist, wird der Nutzer aufgefordert, zur Bestätigung. Eine Geräteeigentümer-App kann die setLockTaskPackages() können Sie festlegen, dass 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 für den Startbildschirm und die zuletzt verwendeten 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 aufgerufen wird, bleibt der Nutzer so lange in Ihrer App gesperrt, bis die App stopLockTask() aufruft.
  • Wenn die Bildschirmfixierung von einer anderen App aktiviert wird, die kein Geräteeigentümer oder direkt vom Nutzer angezeigt wird, kann er die App durch Gedrückthalten der Schaltfläche „Zurück“ und „Zuletzt verwendet“ beenden.

Druckwerk

PDF als Bitmap rendern

Sie können PDF-Dokumentseiten jetzt für den Druck in Bitmapbilder rendern, indem Sie mit der neuen Klasse PdfRenderer. Sie müssen eine ParcelFileDescriptor angeben, die suchbar ist (d. h., auf die Inhalte kann zufällig zugegriffen werden), auf die das System die druckbaren Inhalte schreibt. Ihre App kann eine Seite zum Rendern mit openPage() abrufen und dann render() aufrufen, um die geöffnete PdfRenderer.Page in eine Bitmap umzuwandeln. Ich zusätzliche Parameter festlegen, wenn Sie nur einen Teil des Dokument in ein Bitmapbild umwandeln, z. B. um gekacheltes Rendering um das Dokument zu vergrößern).

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

System

App-Nutzungsstatistiken

Du kannst jetzt auf einem Android-Gerät auf den App-Nutzungsverlauf zugreifen neue android.app.usage API 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 auch den Zugriff für diese App unter Einstellungen > Sicherheit > Apps mit Zugriff auf Nutzungsdaten.

Das System erfasst die Nutzungsdaten pro App und aggregiert sie in täglichen, wöchentlichen, monatlichen und jährlichen Intervallen. Die maximale Dauer dass das System diese Daten speichert:

  • 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 App im Vordergrund während dieses Zeitintervalls (nach Tag, Woche, Monat oder Jahr)
  • Zeitstempel, der aufzeichnet, wann eine Komponente (anhand eines Paket- und Aktivitätsnamens identifiziert) während 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 Zugänglichkeits-

Verbesserungen bei Tests und Bedienungshilfen

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

  • Das neue getWindowAnimationFrameStats() und getWindowContentFrameStats() -Methoden erfassen Frame-Statistiken für Fensteranimationen und -inhalte. Mit diesen Methoden können Sie Instrumentierungstests schreiben, um zu prüfen, ob eine App Frames mit einer ausreichenden Aktualisierungsfrequenz rendert, um eine flüssige Nutzererfahrung zu ermöglichen.
  • Das neue executeShellCommand() können Sie Shell-Befehle über Ihren Instrumentierungstest ausführen. Die Die Befehlsausführung ähnelt der Ausführung von adb shell auf einem Host mit dem Gerät verbunden, sodass Sie Shell-basierte Tools wie dumpsys, am, content und pm.
  • Dienste für Barrierefreiheit und Testtools, die die APIs für Barrierefreiheit verwenden (z. B. UiAutomator), 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 der AccessibilityWindowInfo-Objekte abrufen möchten, rufen Sie die neue Methode getWindows() auf.
  • Mit der neuen Klasse AccessibilityNodeInfo.AccessibilityAction können Sie Standard- oder benutzerdefinierte Aktionen für AccessibilityNodeInfo definieren. Die neue AccessibilityNodeInfo.AccessibilityAction-Klasse ersetzt die APIs für Aktionen, die zuvor unter AccessibilityNodeInfo zu finden waren.
  • Android 5.0 bietet eine detailliertere Steuerung der Sprachausgabesynthese in für Ihre App. Mit der neuen Klasse Voice kann deine App Folgendes tun: Verwendung von Sprachprofilen, die mit bestimmten Gebietsschemata, Qualität und Latenz verbunden sind -Parameter und die für die Sprachausgabe-Funktion spezifischen Parameter.

IME

Einfacherer Wechsel zwischen Eingabesprachen

Ab Android 5.0 können Nutzer leichter zwischen alle Eingaben Methodeneditoren (IME), die von der Plattform unterstützt werden. 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 einen (und ob dieser IME den Wechsel zu einem anderen gefolgt von diesem IME). Eine Bei einem IME mit Wechselmechanismus wird nicht zu einem IME ohne Wechsel gewechselt. Dieses Verhaltensänderung durch die switchToNextInputMethod() .

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

Deklarierbare erforderliche Funktionen

Die folgenden Werte werden jetzt im <uses-feature> So kannst du dafür sorgen, dass deine App nur auf Geräten installiert wird, die Funktionen bereitstellen, die Ihre App benötigt.

Nutzerberechtigungen

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

  • BIND_DREAM_SERVICE: Bei Ausrichtung auf die API ab Stufe 21 benötigen, ist diese Berechtigung für Daydream-Dienst, damit sich nur das System daran binden kann.