Interfejsy API Androida 5.0

Poziom API: 21

Android 5.0 (LOLLIPOP) zawiera nowe funkcje dla użytkowników i deweloperów aplikacji. Ten dokument przedstawia najważniejsze nowe interfejsy 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.

Zamiast tego, aby ogólnie zapoznać się z nowymi funkcjami platformy, zobacz Android Lollipop w Google Ads.

Zacznij programować

Aby zacząć tworzyć aplikacje na Androida 5.0, musisz najpierw pobrać pakiet SDK do Androida. Następnie użyj Menedżera SDK. , aby pobrać platformę SDK Androida 5.0 i obrazy systemu.

Zaktualizuj docelowy poziom interfejsu API

Aby lepiej zoptymalizować aplikację na urządzeniach z Androidem 5.0: Ustaw urządzenie targetSdkVersion na "21", zainstaluj aplikację na urządzeniu z Androidem 5.0, przetestuj go, a następnie opublikuj zaktualizowaną aplikację z tę zmianę.

Możesz używać interfejsów API Androida 5.0 i obsługiwać starsze przez dodanie do kodu warunków, które sprawdzają poziom systemowego interfejsu API przed uruchomieniem interfejsów API nieobsługiwanych przez minSdkVersion. Więcej informacji o zachowaniu zgodności wstecznej znajdziesz w sekcji Pomoc techniczna Różne wersje platformy.

Więcej informacji o poziomach interfejsu API znajdziesz w artykule Co to jest interfejs API? Poziom?

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.

Więcej informacji znajdziesz w artykule Zmiany w Androidzie 5.0.

Interfejs

Obsługa Material Design

Android 5.0 obsługuje nowy interfejs Material Design stylu. Aplikacje możesz tworzyć w stylu Material Design, które są dynamiczne i mieć przejścia elementów interfejsu, które są naturalne. Pomoc ta obejmuje:

  • motyw Material Design,
  • Wyświetl cienie
  • Widżet RecyclerView
  • rysowalne animacje i efekty stylu;
  • Animacja Material Design i efekty przejścia aktywności
  • Animatory właściwości widoku zależne od jego stanu
  • Dostosowywane widżety interfejsu i paski aplikacji z kontrolowaną paletą kolorów
  • Animowane i nieanimowane elementy rysunkowe oparte na grafice wektorowej XML

Więcej informacji o dodawaniu funkcji Material Design do aplikacji znajdziesz tutaj: Styl Material Design.

Równoczesne dokumenty i działania na ekranie ostatnich

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ż co pozwala użytkownikom szybko przełączać się między poszczególnymi czynnościami i dokumentami na ekranie ostatnich danych, zapewniając spójne przełączanie 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ą, dzięki której system potraktuje Twoją aktywność jako nową zadanie; użyj polecenia FLAG_ACTIVITY_NEW_DOCUMENT, gdy rozpoczyna aktywność przy użyciu: 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ć, ustaw parametr <aplikacja> 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 możesz skonfigurować tak, aby były zachowywane po ponownym uruchomieniu. Aby sterować i zachowania trwałości, użyj funkcji 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 klienta użytkownika dla tagu WebView z Androidem 5.0 ma został zaktualizowany do 37.0.0.0 jako numeru wersji.

W tej wersji przedstawiamy klasę PermissionRequest, który umożliwia aplikacji przyznanie uprawnienia WebView aby uzyskać dostęp do zabezpieczonych zasobów, takich jak kamera i mikrofon, przez internetowe interfejsy API na przykład getUserMedia(). Aplikacja musi mieć odpowiednie Uprawnienia Androida do tych zasobów w celu przyznania uprawnień WebView.

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.

Ta wersja zapewnia też obsługę WebAudio, WebGL oraz Otwarte standardy WebRTC. Więcej informacji na temat nowych funkcji dostępnych w tej wersji można znaleźć w artykule WebView na Androida,

Przechwytywanie i udostępnianie ekranu

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 zezwala na przechwytywanie niezabezpieczonego ekranu treści, a nie dźwięku z systemu. Aby rozpocząć przechwytywanie ekranu, aplikacja musi najpierw poprosić użytkownika o zgodę, uruchamiając okno zrzutu ekranu Intent uzyskane za pośrednictwem createScreenCaptureIntent() .

Przykład użycia nowych interfejsów API: MediaProjectionDemo w przykładowym projekcie.

Powiadomienia

Powiadomienia na ekranie blokady

Na ekranach blokady w Androidzie 5.0 można wyświetlać powiadomienia. W Ustawieniach użytkownicy mogą wybrać, czy zezwolić na dostęp wyświetlanie poufnych treści powiadomień na bezpiecznym ekranie blokady.

Aplikacja może kontrolować poziom szczegółowości widocznych powiadomień na bezpiecznym ekranie blokady. Aby ustawić poziom widoczności, wywołaj 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: Pokazuje pełną treść powiadomienia.
  • VISIBILITY_SECRET: Urządzenie nie wyświetla niczego (nawet ikony 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ą usługi Notification.Builder. Kiedy utworzysz prywatny obiekt powiadomienia, dołącz powiadomienie o zastąpieniu, przez Metoda setPublicVersion().

Metadane powiadomień

Android 5.0 korzysta z metadanych powiązanych z powiadomieniami aplikacji aby inteligentniej sortować powiadomienia. Aby ustawić metadane, wywołaj metodę tych metod w Notification.Builder, gdy utwórz powiadomienie:

  • setCategory(): informuje system, jak ma postępować z powiadomieniami z aplikacji, gdy urządzenie jest w trybie priorytetu (np. jeśli powiadomienie reprezentuje połączenie przychodzące, komunikator lub alarm).
  • setPriority(): Oznacza powiadomienie jako bardziej lub mniej ważne niż zwykłe. Powiadomienia z polem priorytetu ustawionym na PRIORITY_MAX lub PRIORITY_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 uprawnienia, aby zasygnalizować systemowi, że powinna się zgrupować powiadomienia od określonych osób lub uszereguj powiadomienia od tych osób uznana za ważniejszą.

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 w systemie OpenGL ES 3.1 na urządzeniu z Androidem zawiera: GLES31 Podczas korzystania z OpenGL ES 3.1 upewnij się, że zadeklaruj ją w pliku manifestu z parametrem <uses-feature> i atrybut android:glEsVersion. Na przykład:

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

Więcej informacji o korzystaniu z OpenGL ES, w tym o sprawdzaniu obsługi wersji OpenGL ES w czasie działania, zapoznaj się z Przewodnik 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 traktowane przez Androida jako jeden pakiet. (Jeśli Masz ANDROID_extension_pack_es31a rozszerzenie, aplikacja może Zakładam, że wszystkie rozszerzenia w pakiecie są dostępne i włączamy język cieniowania funkcji z pojedynczą instrukcją #extension).

Pakiet rozszerzeń obsługuje:

  • Gwarantowana obsługa funkcji cieniowania fragmentów do buforów pamięci masowej, obrazów Atomics (obsługa funkcji cieniowania fragmentów w OpenGL ES 3.1 jest opcjonalna)
  • Moduły do cieniowania Tessellingu i geometrii
  • Format kompresji tekstur ASTC (LDR)
  • Interpolacja i cieniowanie według próbki
  • 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ć, należy zainstalować aplikację wyłącznie na urządzeniach, które obsługują pakiet rozszerzeń. Na przykład:

<manifest>
    <uses-feature android:name=“android.hardware.opengles.aep”
        android:required="true" />
    ...
</manifest>

Multimedia

Interfejs Camera API dla zaawansowanych funkcji aparatu

Android 5.0 wprowadza android.hardware.camera2, Interfejs API usprawniający robienie zdjęć i przetwarzanie obrazów. Teraz możesz automatycznie uzyskiwać dostęp do aparatów dostępnych dla systemu getCameraIdList() i połączyć się z konkretnym urządzeniem openCamera() Aby zacząć robić zdjęcia, utwórz CameraCaptureSession i określ obiekty Surface do wysłania zrobionych zdjęć. CameraCaptureSession można skonfigurować tak, i wykonywania pojedynczych ujęć lub kilku zdjęć z serii.

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

Zajęcia CameraCharacteristics pozwalają aplikacja wykrywa, 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 klasy Camera 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). Ten zapewnia większy zakres dynamiczny, bardziej stabilną precyzję i większą pole manewru. Argumenty 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 część wewnętrznego potoku nie jest jeszcze zmiennoprzecinkowy).
  • Twoja aplikacja może teraz dostarczać dane audio w formacie ByteBuffer w w takim samym formacie jak MediaCodec.
  • WRITE_NON_BLOCKING może uprościć buforowanie i wielowątkowość w przypadku niektórych aplikacji.

Sterowanie odtwarzaniem multimediów

Użyj nowych interfejsów API do powiadomień i multimediów, aby zapewnić interfejs systemu wie o odtwarzaniu multimediów i może 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 Androidzie TV lub Wear, użyj MediaSession klasa, która zajmie się Twoim transportem za pomocą tych samych metod wywołania zwrotnego.

Teraz możesz stworzyć własną aplikację do sterowania multimediami MediaController zajęcia. Te zajęcia: czyli bezpieczne wątki, które pozwalają monitorować i kontrolować odtwarzanie multimediów z poziomu interfejsu aplikacji. Podczas tworzenia kontrolera określ MediaSession.Token aby aplikacja mogła wchodzić w interakcję z danym MediaSession. Korzystając z metod MediaController.TransportControls, możesz wysyłać polecenia, takie jak play(), stop(), skipToNext(), i setRating() aby sterować odtwarzaniem multimediów podczas danej sesji. Za pomocą kontrolera możesz też zarejestruj obiekt MediaController.Callback w śledzić metadane i zmiany stanu w trakcie 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 wprowadza możliwość przeglądania przez aplikacje treści multimedialnych biblioteki innej aplikacji, android.media.browse API. Aby udostępnić treści multimedialne w aplikacji, rozwiń MediaBrowserService zajęcia. Twoja implementacja MediaBrowserService powinien przyznać dostęp do: MediaSession.Token, aby aplikacje mogły odtwarzać treści multimedialne świadczonych w ramach usługi.

Aby korzystać z usługi przeglądarki multimediów, użyj MediaBrowser zajęcia. Określanie komponentu nazwa: MediaSession podczas tworzenia MediaBrowser instancję. 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 DocumentsProvider instancje obsługujące wybór poddrzewa, aby użytkownik mógł przeglądać i wybierać katalog. Zwrócony identyfikator URI do wybranego drzewa podrzędnego. Następnie możesz użyć usługi buildChildDocumentsUriUsingTree() i buildDocumentUriUsingTree() wraz z query() aby poznać drzewo podrzędne.

Nowa metoda createDocument() pozwala tworzyć nowe dokumenty i katalogi z dowolnego miejsca w ramach drzewa podrzędnego. Aby zarządzać istniejącymi dokumentami, użyj renameDocument() i deleteDocument() Sprawdź: COLUMN_FLAGS w celu zweryfikowania, czy dostawcy świadczą takie połączenia, zanim je wyślesz.

Jeśli implementujesz interfejs DocumentsProvider i chcesz aby umożliwić 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 Nowy getExternalMediaDirs() zwraca ścieżki do tych źródeł na wszystkich urządzeniach pamięci współdzielonej. Podobnie jak getExternalFilesDir(), aplikacja nie potrzebuje żadnych 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, dzięki którym aplikacja może dynamiczne skanowanie w poszukiwaniu dostępnych sieci o określonych możliwościach, nawiązać z nimi więź. 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 wybierać sieć i łączyć się z nią dynamicznie z aplikacji, postępuj zgodnie z tymi instrukcjami kroki:

  1. Utwórz ConnectivityManager.
  2. Użyj klasy NetworkRequest.Builder, aby utworzyć NetworkRequest i określ funkcje sieciowe. i typu transportu, który interesuje Twoją aplikację.
  3. Aby wyszukać odpowiednie sieci, zadzwoń pod numer requestNetwork() lub registerNetworkCallback() i przekazać NetworkRequest i implementacja ConnectivityManager.NetworkCallback Użyj requestNetwork(), jeśli chcesz się przełączyć na odpowiednią sieć po jej wykryciu. aby otrzymać tylko powiadomienia o zeskanowanych sieciach bez ich aktywnego przełączania, użyj registerNetworkCallback().

Gdy system wykryje odpowiednią sieć, połączy się z nią, wywołuje metodę onAvailable() oddzwanianie. 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 i może działać jako urządzenie peryferyjne Bluetooth LE. Aplikacje mogą korzystać z tej funkcji do powiadamiania o obecności urządzeniom w pobliżu. 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 usługi android.bluetooth.le umożliwiają transmitowanie Twoich aplikacji reklamy, skanowanie w poszukiwaniu odpowiedzi i nawiązywanie połączeń z urządzeniami Bluetooth w pobliżu Urządzenia LE. Aby zacząć korzystać z nowych funkcji reklamowych i skanowania, dodaj parametr BLUETOOTH_ADMIN uprawnienia dostępu do pliku manifestu. Gdy użytkownicy zaktualizują lub pobiorą aplikację ze Sklepu Play, zostaną poproszeni o przyznanie Twojej aplikacji tych uprawnień: "Informacje o połączeniu Bluetooth: zezwala aplikacji na sterowanie Bluetoothem, w tym wysyłanie danych do urządzeń Bluetooth w pobliżu i otrzymywanie informacji o nich”.

Aby zacząć wyświetlać reklamy przez Bluetooth LE, dzięki czemu inne urządzenia będą mogły wykrywać w aplikacji, połącz startAdvertising() i przekazanie implementacji AdvertiseCallback zajęcia. Obiekt wywołania zwrotnego otrzymuje raport o sukcesie lub niepowodzeniu działań reklamowych.

Android 5.0 wprowadza klasę ScanFilter, które aplikacja może skanować tylko w poszukiwaniu i konkretnych typów urządzeń, które go interesują. Aby rozpocząć skanowanie w poszukiwaniu Bluetootha Urządzenia LE, zadzwoń pod numer startScan() i przekaże listę filtrów. W wywołaniu metody musisz też podać implementacji funkcji ScanCallback w celu raportowania, gdy Znaleziono reklamę 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ępniania.
  • Aplikacja może wywoływać Android Beam na urządzeniu użytkownika, aby udostępniać dane przez Dzwonię pod 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.

Projekt Volta

Oprócz nowych funkcji Android 5.0 kładzie nacisk na lepsze wykorzystanie baterii życia. Używaj nowych interfejsów API i narzędzia, aby poznać i zoptymalizować możliwości swojej aplikacji konsumpcją treści.

Planowanie zadań

Android 5.0 udostępnia nowe JobScheduler Interfejs API, który pozwala zoptymalizować żywotność baterii przez definiowanie zadań, które ma uruchamiać system asynchronicznie w późniejszym czasie lub pod pewnymi warunkami (na przykład gdy urządzenie się ładuje). Planowanie zadań jest przydatne w tych sytuacjach:

  • Aplikacja zawiera zadania nieprzeznaczone dla użytkowników, 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 Wi-Fi połączenia.
  • 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ć uruchamianie zadania w ramach określonego warunków, takich jak:

  • Uruchamiaj, gdy urządzenie się ładuje
  • Uruchamiaj, gdy urządzenie jest połączone z siecią bez pomiaru
  • Uruchamiaj, 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 zostało podłączone na dłużej ponad 2 minuty, a bateria jest na poziomie stan zdrowia), system uruchomi każde zaplanowane zadanie, które jest gotowe do uruchomienia, nawet jeśli termin jeszcze nie wygasł.

Aby zobaczyć przykład użycia interfejsu API JobScheduler: znajdziesz w przykładzie implementacji JobSchedulerSample w tej wersji.

Narzędzia dla programistów dotyczące wykorzystania baterii

Nowe polecenie dumpsys batterystats generuje interesujące dane statystyczne dotyczące wykorzystania baterii przez urządzenie, uporządkowane według unikalnego identyfikatora użytkownika (identyfikator UID). Statystyki obejmują:

  • Historia zdarzeń związanych z baterią
  • Globalne statystyki urządzenia
  • Przybliżone zużycie energii przez UID i komponent systemu
  • Liczba ms na pakiet w przypadku poszczególnych aplikacji
  • Zbiorcze statystyki identyfikatora UID systemu
  • Zbiorcze statystyki dotyczące identyfikatora UID aplikacji

Użyj opcji --help, aby poznać różne opcje: dostosować wynik. Na przykład, aby wydrukować informacje o wykorzystaniu baterii dla danego pakietu aplikacji od ostatniego ładowania urządzenia, uruchom 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ć pod numer setProfileEnabled(), aby włączyć ten profil zarządzany.

Domyślnie w profilu zarządzanym włączona jest tylko niewielka część aplikacji. Dodatkowe aplikacje możesz zainstalować w profilu zarządzanym, łącząc się z nim 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ład implementacji w usłudze BasicManagedProfile w tej wersji.

Właściciel urządzenia

W Androidzie 5.0 wprowadzono możliwość wdrażania aplikacji właściciela urządzenia. Urządzenie właściciel to specjalny rodzaj administrator urządzenia który ma dodatkowe możliwości tworzenia i usuwania użytkowników pomocniczych, a także skonfigurować ustawienia globalne 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 udostępniania opisane w artykule Zarządzana obsługa administracyjna.

Przypinanie ekranu

W Androidzie 5.0 wprowadziliśmy nowy interfejs API przypinania ekranu, który umożliwia Zablokuj użytkownikom możliwość opuszczania zadania lub przerywania przez nich powiadomień. Może Ci się to przydać, jeśli na przykład tworzysz aplikację edukacyjną, by obsługują wysokie wymagania w zakresie oceny na Androidzie lub aplikacje aplikacji kiosku. Po aktywacji przypinania ekranu w aplikacji użytkownicy nie będą widzieć powiadomienia, dostęp do innych aplikacji lub powrót do ekranu głównego, aż aplikacja wyjdzie z tego trybu.

Przypinanie ekranu można włączyć na 2 sposoby:

  • Ręcznie: użytkownicy mogą włączyć przypinanie ekranu w Ustawienia > Bezpieczeństwo > Przypinanie ekranu i wybieranie zadań, które mają pinezkę, klikając ikonę zielonej pinezki na ekranie ostatnich wiadomości.
  • Programowo: aby włączyć przypinanie ekranu. automatycznie, wywołaj startLockTask() z aplikacji. Jeśli aplikacja, która wysłała prośbę, nie jest właścicielem urządzenia, użytkownik zobaczy prośbę. w celu potwierdzenia. Aplikacja właściciela urządzenia może wywołać setLockTaskPackages() umożliwia przypinanie aplikacji bez potwierdzenia użytkownika.

Gdy blokowanie zadań jest aktywne, dzieje się tak:

  • Pasek stanu jest pusty, a powiadomienia i informacje o stanie użytkownika są ukryte.
  • Przyciski Ekran główny i Ostatnie aplikacje są ukryte.
  • Inne aplikacje nie mogą uruchamiać nowych aktywności.
  • Bieżąca aplikacja może rozpoczynać nowe działania, o ile nie tworzyć nowe zadania.
  • Gdy właściciel urządzenia wywoła przypięcie ekranu, użytkownik pozostanie zablokowany do aplikacji, dopóki nie zadzwoni stopLockTask()
  • jeśli przypinanie ekranu zostało włączone przez inną aplikację, która nie jest właścicielem urządzenia; użytkownik może wyjść, przytrzymując przyciski Wstecz i Ostatnie.

Szablon drukowania

Renderuj plik PDF jako mapę bitową

Możesz teraz renderować strony dokumentów PDF w obrazach bitmapowych do drukowania przez za pomocą nowej klasy PdfRenderer. Musisz podać Element ParcelFileDescriptor, który można przewijać (tj. treść może być losowy), w którym system zapisuje treść nadającą się 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ę. Ty możesz też ustawić dodatkowe parametry, jeśli chcesz przekonwertować tylko część na obraz bitmapowy (na przykład w celu zaimplementowania renderowanie kafelkowe aby powiększyć dokument).

Przykład użycia nowych interfejsów API: PdfRendererBasic przykład.

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ż włączyć dostęp do tej aplikacji w sekcji Ustawienia > Bezpieczeństwo > aplikacje, z dostępem do danych o użyciu.

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 znajdowała się na pierwszym planie w tym przedziale czasu (wg dnia, tygodnia, miesiąca lub roku)
  • 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 Ułatwienia dostępu

Testowanie i ułatwienia dostępu

W Androidzie 5.0 wspieramy testowanie ułatwienia dostępu:

  • Nowy getWindowAnimationFrameStats() i getWindowContentFrameStats() metod przechwytywania statystyk klatek animacji okien i zawartości. 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 uruchamiania adb shell z hosta co pozwala na korzystanie z narzędzi opartych na powłoce, takich jak dumpsys, am, content i pm.
  • 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ę AccessibilityWindowInfo obiektów, wywołaj nowy getWindows() .
  • Nowy AccessibilityNodeInfo.AccessibilityAction pozwala zdefiniować standardowe lub niestandardowe działania do wykonania na AccessibilityNodeInfo Nowy AccessibilityNodeInfo.AccessibilityAction zastępuje interfejsy API związane z działaniami, które znajdowały się wcześniej w AccessibilityNodeInfo
  • Android 5.0 umożliwia bardziej precyzyjną kontrolę nad syntezą 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 w działaniu jest wdrażana przez shouldOfferSwitchingToNextInputMethod() .

Dodatkowo platforma sprawdza teraz, czy następny edytor IME zawiera (a tym samym czy dany edytor IME obsługuje przełączenie na po nim). An IME z mechanizmem przełączania nie przełącza się na edytor IME, który go nie ma. 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.

Uprawnienia użytkownika

Te uprawnienia są teraz obsługiwane w <uses-permission> deklaruj uprawnienia wymagane przez aplikację do uzyskiwania dostępu do określonych interfejsów API.

  • BIND_DREAM_SERVICE: gdy kierujesz reklamy na interfejs API na poziomie 21 lub wyższym, to uprawnienie jest wymagane przez usługa Daydream, aby umożliwić powiązanie z nim tylko systemowi.