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

Zur Optimierung deiner App für Geräte mit Android 5.0 targetSdkVersion festlegen auf "21", installiere deine App auf einem Android-Gerät 5.0-System-Image herunter, testen Sie es und veröffentlichen Sie dann die aktualisierte App mit diese Änderung.

Sie können Android 5.0-APIs verwenden und gleichzeitig ältere Versionen Versionen, indem Sie Ihrem Code Bedingungen hinzufügen, mit denen das System-API-Level geprüft wird bevor APIs ausgeführt werden, die von der minSdkVersion nicht unterstützt werden. Weitere Informationen zur Aufrechterhaltung der Abwärtskompatibilität finden Sie unter Unterstützung Verschiedene Plattformversionen.

Weitere Informationen zur Funktionsweise von API-Ebenen finden Sie unter Was ist eine API? Stufe?

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 können.

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

Benutzeroberfläche

Material Design-Unterstützung

Android 5.0 unterstützt das neue Material Design von Android . Ihr könnt Apps mit Material Design erstellen, die visuell dynamisch sind und Übergänge von UI-Elementen, die sich für Nutzende natürlich anfühlen. Zu diesem Support gehören:

  • Das Thema „Material“
  • Schatten anzeigen
  • Das RecyclerView-Widget
  • Drehbare Animations- und Stileffekte
  • Material Design-Animations- und Aktivitätsübergangseffekte
  • Animatoren für Ansichtseigenschaften basierend auf dem Ansichtsstatus
  • 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 deiner App findest du unter Material Design:

Gleichzeitige Dokumente und Aktivitäten auf dem Bildschirm „Zuletzt verwendet“

In früheren Versionen aktueller Bildschirm Für jede App, mit der der Nutzer interagiert hat, nur eine Aufgabe anzeigen kann zuletzt verwendet haben. 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 gleichzeitige Aufgaben sind z. B. geöffnete Tabs in einem Web- Browser-App, Dokumente in einer Produktivitäts-App, gleichzeitige Übereinstimmungen in oder in einer Messaging-App chatten. Deine App kann Aufgaben verwalten durch die Klasse ActivityManager.AppTask.

Eine logische Unterbrechung einzufügen, damit das System Ihre Aktivität als neue zu verwenden, verwenden Sie FLAG_ACTIVITY_NEW_DOCUMENT, wenn Starten der Aktivität mit startActivity() 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. Legen Sie dazu den Parameter <Anwendung> Attribut 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. Zum Steuern des Persistenzverhaltens, verwenden Sie android:persistableMode . 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 Methode onShowFileChooser() können Sie jetzt ein Eingabeformularfeld in der WebView verwenden, und starten Sie eine Dateiauswahl, um Bilder und Dateien auf dem Android-Gerät auszuwählen.

Außerdem unterstützt diese Version die WebAudio WebGL und Offene Standards von WebRTC. 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 Funktionen zur Bildschirmaufnahme und Bildschirmfreigabe Ihre App mit den neuen android.media.projection APIs. Diese Funktion ist nützlich, wenn Sie beispielsweise in einem Video die Bildschirmfreigabe aktivieren möchten. Videokonferenz-App.

Die neue Methode createVirtualDisplay() ermöglicht es Ihrer App, den Inhalt des Hauptbildschirms zu erfassen (Standardeinstellung Display) in ein Surface-Objekt umgewandelt, das Ihre App dann über das Netzwerk senden. Die API lässt nur die Aufnahme eines nicht sicheren Bildschirms zu und nicht die Systemaudioinhalte. Um mit der Bildschirmaufnahme zu beginnen, muss deine App zuerst um die Zustimmung des Nutzers einzuholen, indem Sie mithilfe eines Intent erhalten durch createScreenCaptureIntent() .

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.

Deine App kann festlegen, welche Detailgenauigkeit bei Benachrichtigungen angezeigt wird über dem Sperrbildschirm angezeigt. Rufen Sie zum Festlegen der Sichtbarkeit setVisibility() und geben Sie einen der folgenden Werte an:

  • 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 Benachrichtigung mit der Meldung „Du hast drei neue SMS“ aber die Nachricht wird ausgeblendet, von Inhalten und Absendern. 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.

Benachrichtigungsmetadaten

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 Methode folgenden Methoden in Notification.Builder, wenn Sie Benachrichtigung erstellen:

  • setCategory(): Teilt dem System mit, wie mit App-Benachrichtigungen verfahren werden soll, wenn Gerät sich im Prioritätsmodus befindet, z. B. wenn eine Benachrichtigung für ein eingehenden Anruf, Chatnachricht oder Wecker).
  • setPriority(): Die Benachrichtigung wird als mehr oder weniger wichtig als normale Benachrichtigungen markiert. Benachrichtigungen, bei denen das Prioritätsfeld auf PRIORITY_MAX oder PRIORITY_HIGH erscheinen in einer wird ein kleines unverankertes Fenster angezeigt, wenn die Benachrichtigung auch einen Ton oder eine Vibration aufweist.
  • addPerson(): Hier können Sie eine oder mehrere Personen hinzufügen, die für eine Benachrichtigung relevant sind. Damit kann deine App dem System signalisieren, dass sie gruppiert werden soll Benachrichtigungen von den angegebenen Personen oder Benachrichtigungen dieser Personen einstufen wichtiger sind.

Grafik

Unterstützung für OpenGL ES 3.1

Android 5.0 bietet jetzt auch Java-Oberflächen und native Unterstützung für OpenGL ES 3.1. Die wichtigsten neuen Funktionen von OpenGL ES 3.1 umfassen:

  • Compute-Shader
  • Shader-Objekte trennen
  • Indirekte Zeichenbefehle
  • Multisample- und Schablonentexturen
  • Verbesserungen der Schattierungssprache
  • Erweiterungen für erweiterte Mischmodi und Debugging
  • Abwärtskompatibilität mit OpenGL ES 2.0 und 3.0

Die Java-Oberfläche für OpenGL ES 3.1 unter Android bietet GLES31 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 Prüfung der der von Ihrem Gerät unterstützten OpenGL ES-Version Leitfaden zur OpenGL ES API

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 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 In Ihrem App-Manifest können Sie deklarieren, dass Ihre App darf nur auf Geräten installiert werden, 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

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 Kamerageräte, die dem System zur Verfügung stehen, 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 INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY-Hardwarestufe mit Funktionen entspricht in etwa der der verworfenen Camera der API erstellen.
  • 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.

Um zu sehen, wie Sie die aktualisierte Kamera API, siehe die Implementierung von Camera2Basic und Camera2Video in dieser Version.

Audiowiedergabe

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

  • Deine App kann jetzt Audiodaten im Gleitkommaformat bereitstellen (ENCODING_PCM_FLOAT) Dieses ermöglicht einen größeren Dynamikumfang, eine einheitlichere Genauigkeit und einen größeren Toleranzbereich. 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.)
  • Deine App kann jetzt Audiodaten als ByteBuffer in folgendem Land bereitstellen: im selben Format wie von MediaCodec angegeben.
  • Das WRITE_NON_BLOCKING kann das Zwischenspeichern und Multithreading für einige Apps vereinfachen.

Medienwiedergabesteuerung

Mit den neuen APIs für Benachrichtigungen und Medien über die Medienwiedergabe informiert und Albumcover extrahiert und angezeigt werden können. Die Steuerung der Medienwiedergabe über eine Benutzeroberfläche und einen Dienst ist jetzt mit der neuen MediaSession und MediaController Klassen.

Die neue MediaSession-Klasse ersetzt die verworfene Klasse RemoteControlClient und bietet Eine einzelne Gruppe von Callback-Methoden für die Handhabung von Transportsteuerelementen 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.

Sie können jetzt Ihre eigene Mediensteuerungs-App mit dem neuen Klasse MediaController. Dieser Kurs bietet Thread-sichere Methode, um die Medienwiedergabe über den UI-Prozess Ihrer App zu überwachen und zu steuern. Geben Sie beim Erstellen eines Controllers einen MediaSession.Token an -Objekt, damit deine App mit dem angegebenen MediaSession interagieren kann. Mit den MediaController.TransportControls-Methoden können Sie Befehle wie play(), stop(), skipToNext(), und setRating() 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.

Darüber hinaus können Sie umfangreiche Benachrichtigungen erstellen, die eine Wiedergabesteuerung ermöglichen. an eine Mediensitzung mit dem neuen Notification.MediaStyle gebunden .

Medien durchsuchen

Mit Android 5.0 können Apps nun Medieninhalte durchsuchen einer anderen App über das neue android.media.browse der API erstellen. Um Medieninhalte in Ihrer App sichtbar zu machen, erweitern Sie die Klasse MediaBrowserService. Ihre Implementierung von MediaBrowserService sollte Zugriff auf eine MediaSession.Token, 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. In dieser Browserinstanz kann Ihre App dann eine Verbindung zum verknüpften Dienst herstellen und ein MediaSession.Token Objekt zur Wiedergabe von Inhalten offengelegt über diesen Dienst.

Speicher

Verzeichnisauswahl

Android 5.0 erweitert die Storage Access Framework Damit Nutzer eine ganze Verzeichnisstruktur auswählen können, sodass Apps Lese-/Schreibzugriff haben allen enthaltenen Dokumenten hinzugefügt, ohne dass für jedes Element eine Bestätigung durch den Nutzer erforderlich ist.

Um eine Verzeichnisunterstruktur auszuwählen, erstellen und senden Sie eine OPEN_DOCUMENT_TREE die Nutzerabsicht verstehen. Das System zeigt alle DocumentsProvider Instanzen, die die Unterstrukturauswahl unterstützen, Nutzer können ein Verzeichnis suchen und auswählen. Der zurückgegebene URI steht für Zugriff auf die ausgewählte Unterstruktur. 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 zum Verwalten vorhandener Dokumente renameDocument() und deleteDocument(). 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 Um die Auswahl einer Unterstruktur zu unterstützen, implementieren Sie isChildDocument() und fügen Sie FLAG_SUPPORTS_IS_CHILD ein in COLUMN_FLAGS.

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

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 Um die neuen Werbe- und Scanfunktionen zu nutzen, fügen Sie die BLUETOOTH_ADMIN in deinem Manifest. Wenn Nutzer deine App im Play Store aktualisieren oder herunterladen, wird er gebeten, Ihrer App die folgende Berechtigung zu erteilen: Bluetooth-Verbindungsinformationen: Ermöglicht der App die Steuerung von Bluetooth, wie das Übertragen von Informationen an Bluetooth-Geräte in der Nähe oder das Abrufen von Informationen von diesen.“

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 einen Bericht über den Erfolg oder Misserfolg der Werbung erhält.

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 share-Menü 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() Sie können auch setPreferredService() verwenden, um den bevorzugten Dienst zur Kartenemulation festzulegen, der wird verwendet, wenn eine bestimmte Aktivität im Vordergrund ausgeführt wird.

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 nicht für Nutzer sichtbare Aufgaben, die Sie aufschieben können.
  • Die App enthält Vorgänge, die Sie ausführen möchten, 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. Dieses Objekt gibt die Planungskriterien an.

Verwenden Sie die Klasse JobInfo.Builder, um zu konfigurieren, wie die geplante Aufgabe ausgeführt werden soll. Sie können die Ausführung der Aufgabe unter bestimmten Bedingungen wie:

  • 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 einer bestimmten Frist oder mit einer minimalen Verzögerung abgeschlossen werden.

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 regelmäßig mit Strom versorgt wird, d. h. seit längerer Zeit an die Stromversorgung angeschlossen ist, als 2 Minuten und der Akkuladestand gesund) führt das System alle geplanten Jobs aus, die zur Ausführung bereit sind, auch wenn der Job Frist ist noch nicht abgelaufen.

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

Entwicklertools für Akkunutzung

Der neue dumpsys batterystats-Befehl generiert interessante Statistische Daten zur Akkunutzung eines Geräts, sortiert nach individueller Nutzer-ID (UID) bezeichnet. 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
  • Zusammengefasste System-UID-Statistiken
  • Aggregierte App-UID-Statistiken

Verwenden Sie die Option --help, um mehr über die verschiedenen Optionen für 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ühre 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 Dieses . Dadurch können Sie die Akkus besser verstehen und diagnostizieren. Probleme.

Android am Arbeitsplatz und im Bildungsbereich

Verwaltete Bereitstellung

Android 5.0 bietet neue Funktionen zum Ausführen von Apps in einer Unternehmensumgebung. A Geräteadministrator kann einen verwalteten Bereitstellungsprozess starten, um eine Co-Präsentation hinzuzufügen, aber separate verwaltetes Profil auf einem Gerät, wenn der Nutzer bereits ein privates Konto hat. Apps, die verwalteten Profilen zugeordnet sind, werden neben nicht verwaltete Apps im Launcher, auf dem Bildschirm „Zuletzt verwendet“ 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 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. Dein Launcher Die verwalteten Apps werden visuell hervorgehoben, indem am Symbol ein Arbeitsprofil hinzugefügt wird. Drawable. Rufen Sie zum Abrufen des Badge-Symbols Folgendes auf: getUserBadgedIcon()

Informationen zur Verwendung der neuen Funktion finden Sie in der Implementierungsbeispiel für BasicManagedProfile in diesem Release.

Geräteeigentümer

Mit Android 5.0 kann eine Geräteeigentümer-App bereitgestellt werden. Ein Gerät ist eine spezialisierte Art von Geräteadministrator die die zusätzliche Fähigkeit hat, sekundäre Nutzer zu erstellen und zu entfernen Globale Einstellungen auf dem Gerät konfigurieren Die App des Geräteeigentümers kann die Methoden in der DevicePolicyManager-Klasse, Detaillierte Kontrolle über Konfiguration, Sicherheit und Apps auf verwalteten Geräten 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. Diese Datenübertragung sendet die gleichen Informationen wie im Bereitstellungs-Intent Verwaltete Bereitstellung beschrieben.

Bildschirm anpinnen

Mit Android 5.0 wird eine neue API für die Bildschirmfixierung eingeführt, mit der Sie vorübergehend Nutzer daran hindern, Ihre Aufgabe zu verlassen oder von Benachrichtigungen gestört zu werden. Dies ist beispielsweise nützlich, wenn Sie eine Bildungs-App entwickeln, die anspruchsvollen Prüfungsanforderungen unter Android, einem einzigen Zweck Kiosk-Anwendung. Sobald deine App die Bildschirmfixierung aktiviert hat, können Nutzer nichts mehr sehen Benachrichtigungen erhalten, auf andere Apps zugreifen oder zum Startbildschirm zurückkehren bis die 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, solange das neue Aufgaben zu erstellen.
  • Wenn die Bildschirmfixierung von einem Geräteeigentümer aktiviert wird, bleibt der Nutzer gesperrt. an Ihre App senden, bis sie anruft stopLockTask()
  • 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, die suchbar sind (d. h. der Inhalt) auf die nach dem Zufallsprinzip zugegriffen werden kann), in die das System den druckbaren Inhalt schreibt. Ihre App kann eine Seite zum Rendern mit openPage() und dann anrufen render() 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 finden Sie unter PdfRendererBasic. Stichprobe.

System

App-Nutzungsstatistiken

Du kannst jetzt auf einem Android-Gerät auf den App-Nutzungsverlauf zugreifen neue android.app.usage API Diese API bietet eine detailliertere Nutzung als die verworfenen getRecentTasks()-Methode. Damit Sie diese API verwenden können, müssen Sie zuerst den Parameter "android.permission.PACKAGE_USAGE_STATS" in deinem Manifest. Der Nutzer muss auch den Zugriff für diese App unter Einstellungen > Sicherheit > Apps mit Zugriff auf Nutzungsdaten.

Die Nutzungsdaten werden für jede App einzeln erhoben Daten 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 erfassen, wenn eine Komponente (durch einen Paket- und Aktivitätsnamen identifiziert) werden im Laufe eines Tages in den Vorder- oder Hintergrund verschoben.
  • Zeitstempel erfassen, wenn sich eine Gerätekonfiguration geändert hat, z. B. wenn der Geräteausrichtung aufgrund der Drehung geändert)

Tests und Zugänglichkeits-

Tests und Verbesserungen der Bedienungshilfen

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

  • Das neue getWindowAnimationFrameStats() und getWindowContentFrameStats() -Methoden erfassen Framestatistiken für Fensteranimationen und -inhalte. Diese Methoden können Sie Instrumentierungstests schreiben, um zu bewerten, ob eine App regelmäßig aktualisiert werden, um eine reibungslose Nutzung zu gewährleisten.
  • 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.
  • Bedienungshilfen und Testtools, die die Accessibility APIs verwenden (z. B. UiAutomator) kann jetzt detaillierte Informationen über die Eigenschaften von Fenstern im Bildschirm, mit dem sehende Nutzende interagieren können. Um eine Liste mit AccessibilityWindowInfo-Objekte: Rufen Sie das neue getWindows() .
  • Das neue AccessibilityNodeInfo.AccessibilityAction können Sie Standard- oder benutzerdefinierte Aktionen für eine bestimmte AccessibilityNodeInfo. Das neue AccessibilityNodeInfo.AccessibilityAction ersetzt die aktionsbezogenen APIs, die zuvor in AccessibilityNodeInfo.
  • 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. Die Ausführung der vorgesehenen bei einer Wechselaktion (normalerweise durch Berühren eines Globussymbols auf der Softtastatur) gewechselt wird. über all diese IMEs. Diese Verhaltensänderung wird durch den shouldOfferSwitchingToNextInputMethod() .

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 von IMEs finden Sie unter aktualisiertes Beispiel für die Implementierung der Softtastatur in dieser Version. Weitere Informationen über den Wechsel zwischen IMEs implementieren, siehe 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 <uses-permission> -Element zur Deklaration der Berechtigungen, die deine 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.