Poziom interfejsu API: 21
Android 5.0 (LOLLIPOP) zawiera nowe funkcje dla użytkowników i deweloperów aplikacji. W tym dokumencie znajdziesz wprowadzenie do najważniejszych nowych interfejsów API.
Jeśli masz opublikowaną aplikację, zapoznaj się z informacjami o działaniu Androida 5.0 Zmiany, które należy uwzględnić w aplikacji. Te zmiany w działaniu może mieć wpływ na Twoją aplikację na urządzeniach z Androidem 5.0, nawet jeśli nie korzystasz z nowych interfejsów API lub kierować reklamy na nowe funkcje.
Ogólne informacje o nowych funkcjach platformy znajdziesz w artykule o Androidzie Lollipop.
Zacznij programować
Aby zacząć tworzyć aplikacje na Androida 5.0, musisz najpierw pobrać pakiet Android SDK. Następnie za pomocą Menedżera pakietu SDK pobierz obrazy systemu i platformy pakietu SDK Androida 5.0.
Zaktualizuj docelowy poziom interfejsu API
Aby lepiej zoptymalizować aplikację na urządzenia z Androidem 5.0, ustaw targetSdkVersion
na "21"
, zainstaluj aplikację na obrazie systemu Android 5.0, przetestuj ją, a następnie opublikuj zaktualizowaną aplikację z tą zmianą.
Możesz używać interfejsów API Androida 5.0, a zarazem obsługiwać starsze wersje, dodając do kodu warunki, które sprawdzają poziom interfejsu API systemu przed wykonaniem interfejsów API nieobsługiwanych przez minSdkVersion
.
Więcej informacji o zapewnianiu zgodności wstecznej znajdziesz w artykule Obsługa różnych wersji platform.
Więcej informacji o tym, jak działają poziomy interfejsu API, znajdziesz w artykule Co to jest poziom interfejsu API?
Ważne zmiany w działaniu
Jeśli masz już opublikowaną aplikację na Androida, pamiętaj, że mogą na nią mieć wpływ zmiany wprowadzone w Androidzie 5.0.
Pełne informacje znajdziesz w artykule Zmiany w Androidzie 5.0.
Interfejs
Obsługa Material Design
Android 5.0 obsługuje nowy styl material design. Aplikacje możesz tworzyć w stylu Material Design, które są dynamiczne i mieć przejścia elementów interfejsu, które są naturalne. Obejmuje ona:
- motyw Material Design,
- Wyświetlanie cieni
- Widżet
RecyclerView
- rysowalne animacje i efekty stylu;
- Animacje i efekty przejść w Material Design
- Animatory właściwości widoku na podstawie stanu widoku
- Dostosowywane widżety interfejsu i paski aplikacji z kontrolowaną paletą kolorów
- Animowane i nieanimowane elementy graficzne oparte na wektorowej grafice XML
Więcej informacji o dodawaniu funkcji Material Design do aplikacji znajdziesz tutaj: Styl Material Design.
Dokumenty i aktywności na ekranie Ostatnie
W poprzednich wersjach funkcja
ekran Najnowsze
może wyświetlić tylko jedno zadanie dla każdej aplikacji, z którą użytkownik wszedł w interakcję
najnowszego. W razie potrzeby aplikacja może teraz otwierać więcej zadań w celu wykonania dodatkowych
czynności związane z dokumentami. Ta funkcja ułatwia wielozadaniowość, ponieważ pozwala użytkownikom szybko przełączać się między poszczególnymi działaniami i dokumentami na ekranie Ostatnie, zapewniając spójne przełączanie się między wszystkimi aplikacjami.
Przykładem takich równoczesnych zadań mogą być otwieranie kart w przeglądarce.
przeglądarka, dokumenty w aplikacji zwiększającej produktywność, równoczesne mecze w
w grze lub czatach w aplikacji do obsługi wiadomości. Aplikacja może zarządzać zadaniami
w ramach zajęć ActivityManager.AppTask
.
Aby wstawić przerwę logiczną, aby system traktował aktywność jako nowe zadanie, użyj elementu FLAG_ACTIVITY_NEW_DOCUMENT
podczas uruchamiania aktywności za pomocą elementu startActivity()
. Możesz również uzyskać to zachowanie, ustawiając parametr
<activity> –
atrybutu documentLaunchMode
elementu na "intoExisting"
lub
"always"
w pliku manifestu.
Aby nie zaśmiecać ekranu ostatnich, możesz ustawić maksymalną liczbę
zadania z aplikacji, które mogą pojawić się na tym ekranie. Aby to zrobić, użyj atrybutu <application>android:maxRecents
. Aktualna
można określić maksymalnie 50 zadań na użytkownika (25 w przypadku urządzeń z małą ilością pamięci RAM).
Zadania na ekranie Ostatnie mogą być zachowywane po ponownym uruchomieniu. Aby kontrolować zachowanie trwałości, użyj atrybutu android:persistableMode. Możesz też zmienić
właściwości wizualnych aktywności na ekranie ostatnich, takich jak
kolor, etykietę i ikonę aktywności, wywołując
setTaskDescription()
.
Aktualizacje WebView
Android 5.0 aktualizuje WebView
implementacji w Chromium M37, co zwiększa bezpieczeństwo i stabilność
oraz poprawki błędów. Domyślny ciąg znaków User-Agent w aplikacji WebView
na Androidzie 5.0 został zaktualizowany, aby zawierać numer wersji 37.0.0.0.
W tej wersji wprowadzamy klasę PermissionRequest
, która umożliwia aplikacji przyznawanie uprawnienia WebView
do dostępu do zasobów chronionych, takich jak kamera i mikrofon, za pomocą interfejsów API internetowych, np. getUserMedia(). Aby przyznać uprawnienia WebView
, aplikacja musi mieć odpowiednie uprawnienia Androida do tych zasobów.
W przypadku nowej metody onShowFileChooser()
:
możesz teraz w WebView
używać
pola formularza do wprowadzania danych,
i uruchomić narzędzie wyboru plików,
aby wybrać obrazy i pliki na urządzeniu z Androidem.
Dodatkowo ta wersja zawiera obsługę otwartych standardów WebAudio, WebGL i WebRTC. Więcej informacji o nowych funkcjach dostępnych w tej wersji znajdziesz w artykule Komponent WebView na Androida.
Wykonywanie zrzutów ekranu i udostępnianie ich
Android 5.0 pozwala dodawać funkcje przechwytywania i udostępniania ekranu
z nowymi interfejsami API android.media.projection
. Ta funkcja
jest przydatne, na przykład gdy chcesz włączyć udostępnianie ekranu w filmie,
.
Nowa metoda createVirtualDisplay()
umożliwia aplikacji przechwytywanie zawartości ekranu głównego (domyślnie jest to
do wyświetlania) do obiektu Surface
, który aplikacja może potem
możesz wysyłać przez sieć. Interfejs API umożliwia przechwytywanie tylko niezabezpieczonego zawartości ekranu, a nie dźwięku systemowego. Aby rozpocząć przechwytywanie ekranu, aplikacja musi najpierw poprosić użytkownika o pozwolenie, wyświetlając okno przechwytywania ekranu za pomocą uprawnienia Intent
uzyskanego za pomocą metody createScreenCaptureIntent()
.
Przykład użycia nowych interfejsów API znajdziesz w klasie MediaProjectionDemo
w próbnym projekcie.
Powiadomienia
Powiadomienia na ekranie blokady
Ekrany blokady w Androidzie 5.0 mogą wyświetlać powiadomienia. Użytkownicy mogą w Ustawieniach wybrać, czy treści poufne z powiadomień mają być wyświetlane na zabezpieczonym ekranie blokady.
Aplikacja może kontrolować poziom szczegółowości widoczny, gdy jej powiadomienia są wyświetlane na zabezpieczonym ekranie blokady. Aby określić poziom widoczności, wywołaj funkcję setVisibility()
i podaj jedną z tych wartości:
VISIBILITY_PRIVATE
: Pokazuje podstawowe informacje, takie jak ikona powiadomienia, ale ukrywa pełną treść powiadomienia.VISIBILITY_PUBLIC
: wyświetla pełną treść powiadomienia.VISIBILITY_SECRET
: Nie pokazuje niczego (nawet ikonę powiadomienia).
Gdy poziom widoczności wynosi VISIBILITY_PRIVATE
,
możesz też udostępnić zmienioną wersję powiadomienia
które ukrywają dane osobowe. Aplikacja do SMS-ów może na przykład wyświetlać
powiadomienie „Masz 3 nowe SMS-y” ale ukrywa wiadomość
treści i nadawców. Aby przesłać to alternatywne powiadomienie, najpierw utwórz
powiadomienie o wymianie za pomocą: Notification.Builder
. Podczas tworzenia obiektu powiadomienia prywatnego dołącz do niego powiadomienie zastępcze za pomocą metody setPublicVersion()
.
Metadane powiadomień
Android 5.0 używa metadanych powiązanych z powiadomieniami z aplikacji, aby sortować je w bardziej inteligentny sposób. Aby ustawić metadane, podczas tworzenia powiadomienia wywołuj te metody w Notification.Builder
:
setCategory()
: określa, jak system ma obsługiwać powiadomienia z aplikacji, gdy urządzenie jest w trybie priorytetowym (np. gdy powiadomienie dotyczy połączenia przychodzącego, wiadomości błyskawicznej lub alarmu).setPriority()
: Oznacza powiadomienie jako bardziej lub mniej ważne niż zwykłe. Powiadomienia z polem priorytetu ustawionym naPRIORITY_MAX
lubPRIORITY_HIGH
pojawiają się w małe pływające okno, jeśli powiadomienie sygnalizuje też dźwięk lub wibracje.addPerson()
: pozwala dodać 1 lub więcej osób powiązanych z powiadomieniem. Aplikacja może użyć tego parametru, aby zasygnalizować systemowi, że powinna grupować powiadomienia od określonych osób lub traktować je jako ważniejsze.
Grafika
Obsługa OpenGL ES 3.1
W Androidzie 5.0 dodaliśmy interfejsy Java i wbudowaną obsługę OpenGL ES 3.1. Najważniejsze nowe funkcje OpenGL ES 3.1 to:
- Ściemniacze Compute
- oddzielne obiekty cieniowania,
- Polecenia pośredniego rysowania
- Tekstury z wielu próbek i szablonów
- Ulepszenia języka cieniowania
- Rozszerzenia do zaawansowanych trybów mieszania i debugowania
- Zgodność wsteczna z OpenGL ES 2.0 i 3.0
Interfejs Java dla OpenGL ES 3.1 w systemie Android zawiera:
GLES31
Jeśli używasz OpenGL ES 3.1, pamiętaj, aby zadeklarować go w pliku manifestu za pomocą tagu <uses-feature>
i atrybutu android:glEsVersion
. Na przykład:
<manifest> <uses-feature android:glEsVersion="0x00030001" /> ... </manifest>
Więcej informacji o używaniu OpenGL ES, w tym o sprawdzaniu obsługiwanej wersji OpenGL ES na urządzeniu w czasie wykonywania, znajdziesz w przewodniku po interfejsie OpenGL ES API.
Pakiet rozszerzeń do Androida
Oprócz OpenGL ES 3.1 ta wersja zawiera pakiet rozszerzeń
Interfejsy Java i natywna obsługa zaawansowanych funkcji graficznych. Te rozszerzenia są traktowane przez Androida jako pojedynczy pakiet. (jeśli rozszerzenie ANDROID_extension_pack_es31a
jest obecne, aplikacja może założyć, że wszystkie rozszerzenia w pakiecie są obecne, i włączyć funkcje języka cieniowania za pomocą pojedynczego instrukcji #extension
).
Pakiet rozszerzeń obsługuje:
- Gwarantowana obsługa shadera fragmentów dla zasobników przechowywania shaderów, obrazów i operacji atomowych (obsługa shaderów fragmentów jest opcjonalna w OpenGL ES 3.1).
- Shadery tesselacji i geometryczne
- Format kompresji tekstur ASTC (LDR)
- Interpolacja i cieniowanie na próbkę
- Różne tryby mieszania dla każdego załącznika koloru w buforze ramki
Interfejs pakietu rozszerzeń w Javie zawiera:
GLES31Ext
W manifeście aplikacji możesz zadeklarować, że aplikacja musi być instalowana tylko na urządzeniach obsługujących pakiet rozszerzeń.
Na przykład:
<manifest> <uses-feature android:name=“android.hardware.opengles.aep” android:required="true" /> ... </manifest>
Multimedia
Interfejs Camera API do obsługi zaawansowanych funkcji aparatu
Android 5.0 wprowadza
android.hardware.camera2,
Interfejs API usprawniający robienie zdjęć i przetwarzanie obrazów. Teraz możesz uzyskać dostęp do urządzeń z kamerą dostępnych dla systemu za pomocą funkcji getCameraIdList()
i połączyć się z określonym urządzeniem za pomocą funkcji openCamera()
.
Aby zacząć robić zdjęcia, utwórz CameraCaptureSession
i określ obiekty Surface
do wysłania zrobionych zdjęć.
CameraCaptureSession
można skonfigurować tak, aby wykonywać pojedyncze zdjęcia lub serię zdjęć.
Aby otrzymywać powiadomienia o zrobieniu nowych zdjęć, zaimplementuj
CameraCaptureSession.CaptureCallback
detektor
i ustawiać go w żądaniu przechwytywania. Gdy system zakończy tworzenie obrazu
prośba o przechwytywanie, CameraCaptureSession.CaptureCallback
detektor odbiera połączenie z
onCaptureCompleted()
,
udostępniając metadane dotyczące przechwytywania obrazów
CaptureResult
Klasa CameraCharacteristics
pozwala aplikacji wykryć, jakie funkcje aparatu są dostępne na urządzeniu. Obiekt
Właściwość INFO_SUPPORTED_HARDWARE_LEVEL
określa poziom funkcjonalności kamery.
- Wszystkie urządzenia obsługują co najmniej
na poziomie sprzętowym
INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY
, który udostępnia możliwości mniej więcej odpowiednik wycofanej klasyCamera
API. - Urządzenia, które obsługują poziom sprzętowy
INFO_SUPPORTED_HARDWARE_LEVEL_FULL
, można ręcznie kontrolę nad rejestrowaniem i przetwarzaniem oraz robieniem zdjęć w wysokiej rozdzielczości z dużą liczbą klatek.
Aby zobaczyć, jak korzystać ze zaktualizowanej strony
Aparat
API więcej informacji o implementacji Camera2Basic
i Camera2Video
przykłady w tej wersji.
Odtwarzanie dźwięku
W tej wersji wprowadziliśmy następujące zmiany:
AudioTrack
:
- Twoja aplikacja może teraz dostarczać dane audio w formacie zmiennoprzecinkowym (
ENCODING_PCM_FLOAT
). Umożliwia to większy zakres dynamiczny, bardziej spójną dokładność i większy headroom. Obliczenia zmiennoprzecinkowe są szczególnie przydatne podczas obliczeń pośrednich. Punkty końcowe odtwarzania używają w przypadku danych audio formatu liczb całkowitych i mają mniejszą głębię bitową. (W Androidzie 5.0 niektóre części wewnętrznego potoku nie są jeszcze oparte na liczbach zmiennoprzecinkowych). - Twoja aplikacja może teraz dostarczać dane audio w formacie
ByteBuffer
, w tym samym formacie coMediaCodec
. - Opcja
WRITE_NON_BLOCKING
może uprościć buforowanie i wielowątkowe działanie niektórych aplikacji.
Sterowanie odtwarzaniem multimediów
Użyj nowych interfejsów API powiadomień i multimediów, aby interfejs użytkownika systemu wiedział o odtwarzaniu multimediów i mógł wyodrębnić oraz wyświetlić okładkę albumu.
Sterowanie odtwarzaniem multimediów w interfejsie i w usłudze jest teraz łatwiejsze dzięki
MediaSession
i
MediaController
zajęć.
Nowa klasa MediaSession
zastępuje
wycofana klasa RemoteControlClient
i zapewnia
pojedynczy zestaw metod wywołania zwrotnego do obsługi elementów sterujących transportem i przycisków multimediów.
Jeśli Twoja aplikacja umożliwia odtwarzanie multimediów i działa na platformie Android TV lub Wear, użyj klasy MediaSession
do obsługi elementów sterujących transportem za pomocą tych samych metod wywołania.
Teraz możesz tworzyć własne aplikacje sterujące multimediami za pomocą nowej klasy MediaController
. Ta klasa zapewnia bezpieczny sposób monitorowania i sterowania odtwarzaniem multimediów z procesu interfejsu aplikacji.
Podczas tworzenia kontrolera określ obiekt MediaSession.Token
, aby aplikacja mogła wchodzić w interakcję z danym obiektem MediaSession
.
Za pomocą metod MediaController.TransportControls
możesz wysyłać polecenia takie jak play()
, stop()
, skipToNext()
i setRating()
, aby kontrolować odtwarzanie multimediów w tej sesji. Za pomocą kontrolera możesz też zarejestrować obiekt MediaController.Callback
, aby nasłuchiwać zmian metadanych i stanu w ramach sesji.
Możesz też tworzyć powiadomienia rozszerzone, które dają kontrolę nad odtwarzaniem
jest powiązana z sesją medialną z nowym urządzeniem Notification.MediaStyle
zajęcia.
Przeglądanie multimediów
Android 5.0 umożliwia aplikacjom przeglądanie multimediów z biblioteki innej aplikacji za pomocą nowego interfejsu API android.media.browse. Aby udostępnić treści multimedialne w aplikacji, rozszerz klasę MediaBrowserService
. Implementacja interfejsu MediaBrowserService
powinna zapewniać dostęp do interfejsu MediaSession.Token
, aby aplikacje mogły odtwarzać treści multimedialne udostępniane przez Twoją usługę.
Aby korzystać z usługi przeglądarki multimediów, użyj klasy MediaBrowser
. Podczas tworzenia instancji MediaBrowser
podaj nazwę komponentu MediaSession
. Za pomocą tego wystąpienia przeglądarki
aplikacja może połączyć się z powiązaną usługą i uzyskać
Ujawniono MediaSession.Token
obiekt do odtwarzania treści
za pośrednictwem tej usługi.
Miejsce na dane
Wybór katalogu
Android 5.0 rozszerza Platforma dostępu do pamięci masowej aby umożliwić użytkownikom wybór całego poddrzewa katalogu i przyznać aplikacjom uprawnienia do odczytu i zapisu do wszystkich zawartych dokumentów bez konieczności potwierdzania przez użytkownika poszczególnych elementów.
Aby wybrać poddrzewo katalogu, utwórz i wyślij
OPEN_DOCUMENT_TREE
intencji. System wyświetla wszystkie instancje DocumentsProvider
, które obsługują wybór poddrzewa, umożliwiając użytkownikowi przeglądanie i wybieranie katalogów. Zwrócony identyfikator URI
do wybranego drzewa podrzędnego. Następnie możesz użyć funkcji buildChildDocumentsUriUsingTree()
i buildDocumentUriUsingTree()
oraz
query()
do zbadania poddrzewa.
Nowa metoda createDocument()
pozwala tworzyć nowe dokumenty lub katalogi w dowolnym miejscu w poddrzewie. Aby zarządzać istniejącymi dokumentami, użyj opcji renameDocument()
i deleteDocument()
.
Sprawdź COLUMN_FLAGS
, aby uzyskać informacje o obsługiwanych przez operatora telefonach.
Jeśli implementujesz interfejs DocumentsProvider
i chcesz
aby obsługiwać wybór poddrzewa, zaimplementuj isChildDocument()
i uwzględnij FLAG_SUPPORTS_IS_CHILD
na liście COLUMN_FLAGS
.
W Androidzie 5.0 pojawiły się też nowe katalogi pakietów
pamięć współdzielona, w której aplikacja może umieszczać pliki multimedialne w celu uwzględnienia
MediaStore
Nowa funkcja getExternalMediaDirs()
zwraca ścieżki do tych katalogów na wszystkich urządzeniach z udostępnionym miejscem na dane. Podobnie jak w przypadku funkcji getExternalFilesDir()
, aplikacja nie potrzebuje dodatkowych uprawnień, aby uzyskać dostęp do zwróconych ścieżek.
platforma okresowo skanuje treści w tych katalogach w poszukiwaniu nowych multimediów, ale możesz też
użyj polecenia MediaScannerConnection
, aby wyszukać nowe
treści.
Bezprzewodowe Połączenie
Wiele połączeń sieciowych
Android 5.0 udostępnia nowe interfejsy API obsługujące wiele sieci, które umożliwiają dynamiczne skanowanie dostępnych sieci o określonych możliwościach i nawiązywanie z nimi połączenia. Jest to przydatne, gdy Twoja aplikacja wymaga specjalistycznej sieci, takiej jak SUPL, MMS lub sieć płatności przez operatora, lub jeśli chcesz wysyłać dane, używając określonego typu protokołu transportowego.
Aby wybrać sieć i połączyć się z nią dynamicznie z aplikacji, wykonaj te czynności:
- Utwórz
ConnectivityManager
. - Użyj klasy
NetworkRequest.Builder
, aby utworzyćNetworkRequest
i określ funkcje sieciowe. i typu transportu, który interesuje Twoją aplikację. - Aby przeskanować dostępne sieci, wywołaj funkcję
requestNetwork()
lubregisterNetworkCallback()
, przekazując obiektNetworkRequest
i implementacjęConnectivityManager.NetworkCallback
. Użyj metodyrequestNetwork()
, jeśli chcesz aktywnie przełączyć się na odpowiednią sieć po jej wykryciu. Aby otrzymywać tylko powiadomienia o skanowanych sieciach bez aktywnego przełączania, użyj metodyregisterNetworkCallback()
.
Gdy system wykryje odpowiednią sieć, połączy się z nią i wywoła funkcję onAvailable()
. Możesz użyć obiektu Network
z wywołania zwrotnego do
uzyskać dodatkowe informacje o sieci lub przekierować ruch
w wybranej sieci.
Bluetooth Low Energy
W Androidzie 4.3 wprowadzono obsługę platformy Bluetooth Low Energy (Bluetooth LE). W Androidzie 5.0 urządzenie z Androidem może pełnić funkcję urządzenia peryferyjnego Bluetootha LE. Aplikacje mogą używać tej funkcji, aby informować urządzenia w pobliżu o swojej obecności. Można na przykład tworzyć aplikacje które pozwalają urządzeniu pełnić funkcję krokomierza lub monitora stanu zdrowia i komunikować się swoje dane z innym urządzeniem Bluetooth LE.
Nowe interfejsy API android.bluetooth.le
umożliwiają aplikacjom nadawanie reklam, skanowanie w poszukiwaniu odpowiedzi i nawiązywanie połączeń z urządzeniami Bluetooth LE w pobliżu. Aby zacząć korzystać z nowych funkcji reklamowych i skanowania, dodaj parametr
BLUETOOTH_ADMIN
uprawnienia dostępu do pliku manifestu. Gdy użytkownicy aktualizują lub pobierają aplikację ze Sklepu Play, proszą o przyznanie aplikacji tych uprawnień: „Informacje o połączeniu Bluetooth: umożliwia aplikacji sterowanie Bluetoothem, w tym przesyłanie i odbieranie informacji o urządzeniach Bluetooth w pobliżu”.
Aby rozpocząć reklamowanie przez Bluetooth LE, aby inne urządzenia mogły wykryć Twoją aplikację, wywołaj funkcję startAdvertising()
i przekaż implementację klasy AdvertiseCallback
. Obiekt wywołania zwrotnego otrzymuje raport o udanej lub nieudanej operacji reklamowej.
Android 5.0 wprowadza klasę ScanFilter
, dzięki której aplikacja może skanować tylko określone typy urządzeń. Aby rozpocząć skanowanie urządzeń Bluetooth LE, wywołaj funkcję startScan()
i przekaż listę filtrów. W wywołaniu metody musisz też podać implementację ScanCallback
, aby zgłaszać znalezienie reklamy Bluetooth LE.
Ulepszenia NFC
Android 5.0 dodaje te ulepszenia, aby zwiększyć zakres i inne ulepszenia elastyczne wykorzystanie NFC:
- Android Beam jest teraz dostępny w menu Udostępnij.
- Aplikacja może wywołać funkcję Android Beam na urządzeniu użytkownika, aby udostępnić dane, wywołując funkcję
invokeBeam()
. Dzięki temu użytkownik nie będzie musiał ręcznie zbliżyć urządzenia do innego. urządzenie z modułem NFC, by zakończyć przesyłanie danych. - Za pomocą nowej metody
createTextRecord()
możesz utworzyć rekord NDEF zawierający dane tekstowe UTF-8. - Twórcy aplikacji płatniczej mogą teraz
dynamicznie rejestrować identyfikator aplikacji NFC (AID), wywołując
registerAidsForService()
Możesz też użyćsetPreferredService()
, aby ustawić preferowaną usługę emulacji karty, która powinna należy używać, gdy konkretne działanie występuje na pierwszym planie.
Project Volta
Oprócz nowych funkcji Android 5.0 kładzie nacisk na lepsze wykorzystanie baterii życia. Korzystaj z nowych interfejsów API i nowego narzędzia, aby poznać i zoptymalizować zużycie energii przez aplikację.
Planowanie zadań
Android 5.0 udostępnia nowy interfejs API JobScheduler
, który pozwala zoptymalizować czas pracy baterii przez definiowanie zadań do wykonania przez system asynchronicznie w późniejszym czasie lub w określonych warunkach (np. gdy urządzenie jest ładowane). Planowanie zadań jest przydatne w takich sytuacjach:
- Aplikacja ma zadania, które nie są skierowane do użytkowników i które możesz odłożyć.
- Aplikacja ma ustawienia, które chcesz wykonywać, gdy urządzenie jest podłączone.
- Aplikacja ma zadanie, które wymaga dostępu do sieci lub połączenia z Wi-Fi.
- Aplikacja ma pewną liczbę zadań, które chcesz uruchamiać regularnie, zbiorczo. harmonogram.
Jednostka pracy jest zawarta w obiekcie JobInfo
.
Ten obiekt określa kryteria planowania.
Użyj klasy JobInfo.Builder
, aby skonfigurować
powinno zostać uruchomione zaplanowane zadanie. Możesz zaplanować wykonywanie zadania w określonych warunkach, takich jak:
- Uruchamiaj, gdy urządzenie się ładuje
- Uruchamiaj, gdy urządzenie jest połączone z siecią bez pomiaru
- Uruchamianie, gdy urządzenie jest nieaktywne
- ukończysz przed określonym terminem lub z minimalnym opóźnieniem.
Można na przykład dodać taki kod, aby uruchomić zadanie na sieć bez pomiaru:
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);
Jeśli urządzenie ma stabilne zasilanie (czyli jest podłączone przez ponad 2 minuty i bateria ma odpowiednią pojemność), system uruchomi każde zaplanowane zadanie, które jest gotowe do wykonania, nawet jeśli nie minął jeszcze jego termin.
Przykład użycia interfejsu API JobScheduler
znajdziesz w implementacji JobSchedulerSample
w tej wersji.
Narzędzia dla programistów dotyczące zużycia baterii
Nowe polecenie dumpsys batterystats
generuje interesujące dane statystyczne o zużyciu baterii na urządzeniu, uporządkowane według unikalnego identyfikatora użytkownika (UID). Statystyki obejmują:
- Historia zdarzeń związanych z baterią
- Globalne statystyki urządzenia
- Przybliżone zużycie energii przez UID i komponent systemu
- Czas opóźnienia w ms na pakiet dla poszczególnych aplikacji mobilnych
- Zbiorcze statystyki identyfikatora UID systemu
- Zbiorcze statystyki dotyczące identyfikatora UID aplikacji
Użyj opcji --help
, aby poznać różne opcje:
dostosować wynik. Aby na przykład wydrukować statystyki wykorzystania baterii przez dany pakiet aplikacji od ostatniego naładowania urządzenia, wykonaj to polecenie:
$ adb shell dumpsys batterystats --charged <package-name>
Za pomocą
Historia baterii
na danych wyjściowych polecenia dumpsys
wygenerować wizualizację HTML na podstawie dzienników zdarzeń związanych z zasilaniem. Ten
ułatwiają zrozumienie i diagnozowanie baterii.
powiązane problemy.
Android w miejscu pracy i w edukacji
Zarządzana obsługa administracyjna
Android 5.0 oferuje nowe funkcje uruchamiania aplikacji w środowisku korporacyjnym. O administrator urządzenia może zainicjuj proces zarządzanej obsługi administracyjnej, aby dodać coPrezentuj, ale oddzielnie profilem zarządzanym na urządzeniu, jeśli użytkownik ma już konto osobiste. Aplikacje powiązane z profilami zarządzanymi są widoczne obok niezarządzanych aplikacji w Menu z aplikacjami, na ekranie ostatnich i w powiadomieniach.
Aby rozpocząć proces obsługi administracyjnej, wyślij
ACTION_PROVISION_MANAGED_PROFILE
w: Intent
. Jeśli
zostanie wywołany, system aktywuje
onProfileProvisioningComplete()
oddzwonienie.
Następnie możesz zadzwonić na numer setProfileEnabled()
, aby włączyć ten profil zarządzany.
Domyślnie w profilu zarządzanym włączona jest tylko niewielka część aplikacji.
Aby zainstalować dodatkowe aplikacje na profilu zarządzanym, zadzwoń pod numer enableSystemApp()
.
Jeśli tworzysz aplikację Launcher, możesz użyć nowej klasy LauncherApps
, aby uzyskać listę działań, które można uruchomić
dla bieżącego użytkownika i wszystkich powiązanych profili zarządzanych. Launcher może
aplikacje zarządzane są dobrze widoczne – do ikony można dołączyć plakietkę służbową;
obiekt rysowalny. Aby pobrać ikonę z plakietką, wywołaj
getUserBadgedIcon()
Aby dowiedzieć się, jak korzystać z nowej funkcji, zapoznaj się z przykładem implementacji BasicManagedProfile
w tej wersji.
Właściciel urządzenia
Android 5.0 umożliwia wdrożenie aplikacji właściciela urządzenia. Właściciel urządzenia to specjalistyczny typ administratora urządzenia, który ma dodatkowe uprawnienia do tworzenia i usuwania użytkowników dodatkowych oraz konfigurowania ustawień globalnych na urządzeniu. Aplikacja właściciela urządzenia może używać
DevicePolicyManager
metody do podjęcia
szczegółowa kontrola nad konfiguracją, zabezpieczeniami i aplikacjami na urządzeniach zarządzanych.
Urządzenie może mieć tylko 1 aktywnego właściciela.
Aby wdrożyć i aktywować właściciela urządzenia, musisz przesłać dane NFC z aplikacji do programowania na urządzenie, gdy nie jest ono obsługiwane stanu. Ten transfer danych wysyła te same informacje, co intencja alokacji opisana w artykule Zarządzanie alokacją.
Przypinanie ekranu
Android 5.0 wprowadza nowy interfejs API do przypinania ekranu, który umożliwia tymczasowe ograniczenie możliwości opuszczenia zadania przez użytkowników lub przerywania im przez powiadomienia. Możesz tego użyć na przykład wtedy, gdy tworzysz aplikację edukacyjną, która obsługuje wymagania dotyczące ważnych egzaminów na Androidzie, lub aplikację kiosku o jednym przeznaczeniu. Gdy aplikacja aktywuje przypinanie ekranu, użytkownicy nie mogą wyświetlać powiadomień, uzyskiwać dostępu do innych aplikacji ani wracać do ekranu głównego, dopóki aplikacja nie wyjdzie z tego trybu.
Możesz aktywować przypinanie ekranu na 2 sposoby:
- Ręcznie: użytkownicy mogą włączyć przypinanie ekranu w sekcji Ustawienia > Zabezpieczenia > Przypinanie ekranu i wybrać zadania, które chcą przypiąć, dotykając zielonej ikony szpilki na ekranie z ostatnio używanymi aplikacjami.
- Programowo: aby aktywować przypinanie ekranu programowo, wywołaj funkcję
startLockTask()
w swojej aplikacji. Jeśli aplikacja wysyłająca żądanie nie jest własnością właściciela urządzenia, użytkownik otrzyma prośbę o potwierdzenie. Aplikacja właściciela urządzenia może wywołaćsetLockTaskPackages()
umożliwia przypinanie aplikacji bez potwierdzenia użytkownika.
Gdy blokada działania jest aktywna, występuje następujące zachowanie:
- Pasek stanu jest pusty, a powiadomienia i informacje o stanie są ukryte.
- Przyciski Ekran główny i Ostatnie aplikacje są ukryte.
- Inne aplikacje nie mogą uruchamiać nowych aktywności.
- Bieżąca aplikacja może uruchamiać nowe działania, o ile nie powoduje to tworzenia nowych zadań.
- Gdy właściciel urządzenia wywoła przypięcie ekranu, użytkownik pozostanie w aplikacji do momentu, aż aplikacja wywoła funkcję
stopLockTask()
. - Jeśli przypinanie ekranu zostało aktywowane przez inną aplikację, która nie jest własnością właściciela urządzenia, ani bezpośrednio przez użytkownika, użytkownik może zamknąć aplikację, przytrzymując przyciski Wstecz i Ostatnie.
Platforma drukowania
Renderowanie pliku PDF jako bitmapy
Za pomocą nowej klasy PdfRenderer
możesz teraz renderować strony dokumentu PDF na obrazy bitmapowe do drukowania. Musisz podać ParcelFileDescriptor
, który można przesuwać (czyli do którego można uzyskać dostęp w dowolnym momencie), na którym system zapisuje treści do wydrukowania.
Aplikacja może uzyskać stronę do renderowania za pomocą parametru
openPage()
, a następnie zadzwoń
render()
aby zmienić otwarte PdfRenderer.Page
w bitmapę. Możesz też ustawić dodatkowe parametry, jeśli chcesz przekonwertować tylko część dokumentu na obraz bitmapowy (na przykład aby zastosować renderowanie w kafelkach w celu powiększenia dokumentu).
Przykład użycia nowych interfejsów API znajdziesz w pliku PdfRendererBasic
sample.
System
Statystyki użytkowania aplikacji
Możesz teraz uzyskać dostęp do historii korzystania z aplikacji na urządzeniu z Androidem
nowy interfejs API android.app.usage
. Ten interfejs API umożliwia bardziej szczegółowe wykorzystanie
niż w przypadku wycofanych
Metoda getRecentTasks()
.
Aby korzystać z tego interfejsu API, musisz najpierw zadeklarować
uprawnienia "android.permission.PACKAGE_USAGE_STATS"
w pliku manifestu.
Użytkownik musi też zezwolić na dostęp do tej aplikacji w sekcji Ustawienia > Bezpieczeństwo > Aplikacje z dostępem do danych.
System zbiera dane o korzystaniu z poszczególnych aplikacji, agreguje wartości danych w ujęciu dziennym, tygodniowym, miesięcznym i rocznym. Maksymalny czas trwania że system przechowuje te dane w następujący sposób:
- Dane dzienne: 7 dni
- Dane tygodniowe: 4 tygodnie
- Dane miesięczne: 6 miesięcy
- Dane roczne: z 2 lat
W przypadku każdej aplikacji system rejestruje te dane:
- Czas ostatniego użycia aplikacji
- Łączny czas, przez jaki aplikacja była na pierwszym planie w danym przedziale czasu (dzień, tydzień, miesiąc lub rok).
- Sygnatura czasowa przechwytywania momentu, w którym komponent (identyfikowany na podstawie nazwy pakietu i działania) przeniesione na pierwszy plan lub w tle w ciągu dnia
- Sygnatura czasowa reprezentująca moment zmiany konfiguracji urządzenia (np. orientacja urządzenia zmieniona z powodu obrotu)
Testowanie i ułatwienia dostępu
Testowanie i ulepszone ułatwienia dostępu
W Androidzie 5.0 wspieramy testowanie ułatwienia dostępu:
- Nowe metody
getWindowAnimationFrameStats()
igetWindowContentFrameStats()
rejestrują statystyki dotyczące klatek dla animacji i treści okna. Metody te pozwalają na pisanie testów narzędziowych pozwalających ocenić, czy aplikacja renderuje się klatki z wystarczającą częstotliwością odświeżania, aby zapewnić płynność działania. - Nowy
executeShellCommand()
umożliwia wykonywanie poleceń powłoki z testu instrumentacji. Wykonywanie poleceń jest podobne do uruchamianiaadb shell
na hoście połączonym z urządzeniem. Umożliwia to korzystanie z narzędzi opartych na powłoce, takich jakdumpsys
,am
,content
ipm
. - Usługi ułatwień dostępu i narzędzia testowe korzystające z interfejsów API ułatwień dostępu
(np.
UiAutomator
) może teraz pobierać szczegółowe informacje o właściwościach okien na na którym mogą wchodzić w interakcje osoby widzące. Aby pobrać listę obiektówAccessibilityWindowInfo
, wywołaj nową metodęgetWindows()
. - Nowa klasa
AccessibilityNodeInfo.AccessibilityAction
umożliwia zdefiniowanie standardowych lub niestandardowych działań do wykonania na obiekcieAccessibilityNodeInfo
. NowyAccessibilityNodeInfo.AccessibilityAction
zastępuje interfejsy API związane z działaniami, które znajdowały się wcześniej wAccessibilityNodeInfo
- Android 5.0 umożliwia dokładniejszą kontrolę syntezy tekstu na mowę
do aplikacji. Nowa klasa w usłudze
Voice
umożliwia aplikacji: używać profili głosowych powiązanych z określonymi regionami, jakością i opóźnieniami. ocenę i parametry charakterystyczne dla mechanizmu przetwarzania tekstu na mowę.
IME
Łatwiejsze przełączanie między językami wprowadzania
Począwszy od Androida 5.0, użytkownicy mogą łatwiej przełączać się między
wszystkie dane wejściowe
edytorów metod (IME) obsługiwanych przez platformę. Wykonywanie wyznaczonych
przełączanie (zwykle kliknięcie ikony kuli ziemskiej na klawiaturze programowej)
za pomocą wszystkich tego rodzaju IME. Ta zmiana zachowania jest implementowana przez metodę shouldOfferSwitchingToNextInputMethod()
.
Ponadto sprawdza teraz, czy następny IME zawiera mechanizm przełączania (czyli czy obsługuje przełączenie na następny IME). IME z mechanizmem przełączania nie będzie przełączać się na IME bez mechanizmu przełączania. Ten
zmiana zachowania jest wprowadzana przez
switchToNextInputMethod()
.
Aby zobaczyć przykład użycia zaktualizowanych interfejsów API przełączania IME, zapoznaj się z zaktualizowany przykład implementacji klawiatury programowej w tej wersji. Aby dowiedzieć się więcej o: jak wdrożyć przełączanie między edytorami IME, zobacz Tworzenie metody wprowadzania.
Deklaracje w pliku manifestu
Deklarowane wymagane funkcje
Poniższe wartości są teraz obsługiwane w
<uses-feature>
dzięki czemu masz pewność, że aplikacja jest zainstalowana tylko na urządzeniach, które
udostępniać funkcje, których potrzebuje Twoja aplikacja.
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
Uprawnienia użytkownika
W elemencie <uses-permission>
możesz teraz deklarować uprawnienia, których aplikacja potrzebuje do dostępu do określonych interfejsów API.
BIND_DREAM_SERVICE
: w przypadku kierowania na interfejs API na poziomie 21 lub wyższym usługa Daydream wymaga tego uprawnienia, aby zapewnić, że tylko system będzie mógł się z nią łączyć.