Interfejsy API Androida 5.0

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, WebGLWebRTC. 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:

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 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 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 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). 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 co MediaCodec.
  • 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:

  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 przeskanować dostępne sieci, wywołaj funkcję requestNetwork() lub registerNetworkCallback(), przekazując obiekt NetworkRequest i implementację ConnectivityManager.NetworkCallback. Użyj metody requestNetwork(), 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 metody registerNetworkCallback().

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()getWindowContentFrameStats() 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 uruchamiania adb shell na hoście połączonym z urządzeniem. Umożliwia to korzystanie z narzędzi opartych na powłoce, takich jak dumpsys, am, contentpm.
  • 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ów AccessibilityWindowInfo, wywołaj nową metodę getWindows().
  • Nowa klasa AccessibilityNodeInfo.AccessibilityAction umożliwia zdefiniowanie standardowych lub niestandardowych działań do wykonania na obiekcie 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 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.

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ć.