Funkcje i interfejsy API Androida 8.0

Android 8.0 (poziom API 26) wprowadza różne nowe funkcje i możliwości dla użytkowników oraz deweloperów. W tym dokumencie opisujemy nowości dla deweloperów.

Zapoznaj się też ze zmianami w zachowaniu Androida 8.0, aby dowiedzieć się, w jakich obszarach zmiany w systemie mogą wpłynąć na Twoje aplikacje.

Jakość usług

Tryb obrazu w obrazie

Obraz w obrazie w Androidzie 8.0.

Android 8.0 (poziom interfejsu API 26) umożliwia uruchamianie działań trybie obraz w obrazie (PIP). Tryb Picture-in-picture to specjalny tryb wielookienkowy, który jest używany głównie do odtwarzania filmów. Tryb obrazu w obrazie był pierwotnie dostępny tylko na Androidzie TV. W Androidzie 8.0 można go używać na innych urządzeniach z Androidem.

Gdy aktywność jest w trybie obrazu w obrazie, jest wstrzymana, ale powinna nadal wyświetlać treści. Dlatego upewnij się, że aplikacja nie wstrzymuje odtwarzania w obiekcie onPause(). Zamiast tego wstrzymaj film za onStop() i wznów odtwarzanie za onStart(). Więcej informacji: Wiele okien Cykl życia.

Aby określić, że Twoja aktywność może korzystać z trybu obrazu w wyświetlaczu, ustaw w pliku manifestu wartość android:supportsPictureInPicture na „true” (prawda). (Począwszy od Androida 8.0, tryb pełnoekranowy nie wymaga atrybutu android:resizeableActivity w pliku manifestu. Musisz jednak android:resizeableActivity na „prawda”, jeśli aktywność obsługuje inne trybie wielu okien).

Android 8.0 (poziom interfejsu API 26) wprowadza nowy obiekt – PictureInPictureParams, przekazywane do metod PIP, aby określić, jak powinna zachowywać się aktywność. w trybie PIP. Ten obiekt określa właściwości takie jak preferowany format obrazu aktywności.

Istniejące metody PIP opisane w dodaniu obrazu w obrazie można teraz stosować na wszystkich urządzeniach z Androidem, a nie tylko na Androidzie TV. Ponadto: Android 8.0 udostępnia poniższe metody obsługi Tryb PIP:

  • Activity.enterPictureInPictureMode(PictureInPictureParams args): przenosi aktywność do trybu obrazu w obrazie. Format obrazu aktywności oraz inne ustawienia konfiguracji są określane przez args. Jeśli jakiekolwiek pola w args są puste, system używa wartości ustawionych ostatnio, pod tytułem Activity.setPictureInPictureParams().

    Określone działanie jest umieszczone w rogu ekranu. reszta ekran zostanie wypełniony wcześniejszymi czynnościami, które były na nim widoczne. Aktywność przechodząca w tryb obrazu w powietrzu zostaje wstrzymana, ale pozostaje uruchomiona. Jeśli użytkownik kliknie aktywność PIP, system wyświetli menu użytkownik, z którym wchodzi w interakcję; żadne zdarzenia dotknięcia nie docierają do aktywności w trakcie jej trwania w stanie PIP.

  • Activity.setPictureInPictureParams(): Aktualizuje ustawienia konfiguracji PIP aktywności. Jeśli aktywność jest obecnie w trybie obrazu w obrazie, ustawienia zostaną zaktualizowane. Jest to przydatne, gdy zmienia się format obrazu aktywności. Jeśli aktywność nie jest w trybie PIP, te ustawienia konfiguracyjne są używane niezależnie enterPictureInPictureMode() wywołana przez Ciebie metoda.

Powiadomienia

W Androidzie 8.0 (poziom interfejsu API 26) przeprojektowaliśmy powiadomienia, aby zapewnić prostszy i bardziej spójny sposób zarządzania ich zachowaniem i ustawieniami. Są to:

    Menu po długim naciśnięciu powiadomienia w Androidzie 8.0 (poziom interfejsu API 26).

    Użytkownicy mogą przytrzymać ikony menu z aplikacjami, by je wyświetlić powiadomienia w Androidzie 8.0.

  • Kanały powiadomień: Wprowadzenie do Androida 8.0 kanały powiadomień umożliwiające utworzenie kanału dostosowanego do potrzeb użytkownika. dla każdego typu powiadomienia, które chcesz wyświetlić. W interfejsie kanały powiadomień są nazywane kategoriami powiadomień. Aby dowiedzieć się, jak to zrobić, dotyczące implementacji kanałów powiadomień, zobacz Zarządzanie kanałów powiadomień.
  • Kropki powiadomień: Android 8.0 wprowadza obsługę wyświetlania kropki lub plakietki na ikonach Menu z aplikacjami. Kropki powiadomień odzwierciedlają obecności powiadomień, których użytkownik jeszcze nie zamknął lub nie wykonał w związku z nimi żadnych działań. Więcej informacji o korzystaniu z plakietek powiadomień znajdziesz w sekcji Powiadomienie .
  • Odkładanie na później: użytkownicy mogą odłożyć na później powiadomienia, które znikną na pewien czas, a potem pojawią się ponownie. Powiadomienia pojawiają się ponownie z z takim samym poziomem ważności. Aplikacje mogą usuwać lub aktualizować powiadomienia w trybie wstrzymania, ale zaktualizowanie powiadomienia w trybie wstrzymania nie powoduje jego ponownego wyświetlenia.
  • Czasy oczekiwania na powiadomienia: możesz ustawić limit czasu podczas tworzenia powiadomienie przez setTimeoutAfter() Za pomocą tej metody możesz określić czas, po którym powiadomienie powinno zostać anulowane. W razie potrzeby możesz anulować powiadomienie przed upływem określonego czasu oczekiwania.
  • Ustawienia powiadomień: możesz zadzwonić setSettingsText() aby ustawić tekst, który pojawia się po utworzeniu linku do ustawień powiadomień z poziomu powiadomienia za pomocą Intencja Notification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES. System może udostępniać te dodatkowe informacje, aby filtrować ustawienia, które aplikacja musi wyświetlać użytkownikom: EXTRA_CHANNEL_ID, NOTIFICATION_TAGNOTIFICATION_ID.
  • Zamknięcie powiadomienia: użytkownicy mogą sami zamknąć powiadomienia, a aplikacje mogą je usuwać programowo. Aby określić, kiedy powiadomienie zostało zamknięte i dlaczego, zastosuj metodę onNotificationRemoved() z klasy NotificationListenerService.
  • Kolory tła: możesz ustawić i włączyć kolor tła dla powiadomienia. Należy używać tej funkcji tylko w przypadku bieżących zadań, które są ważne dla użytkownika i które można zobaczyć na pierwszy rzut oka. Możesz na przykład ustawić kolor tła dla powiadomień związanych z przebiegiem trasy lub z rozmową telefoniczną. Możesz też określić wybranego koloru tła za pomocą funkcji setColor() Pozwoli to użyć atrybutu setColorized(), aby włączyć kolor tła dla powiadomienia.
  • Styl wiadomości: w Androidzie 8.0 powiadomienia korzystające z klasyMessagingStyle wyświetlają więcej treści w zwiniętych formach. Do powiadomień związanych z wiadomościami należy używać klasy MessagingStyle. Możesz też użyć usługi Metoda addHistoricMessage(), która pozwala zapewnić kontekst rozmowy poprzez dodanie historyczne wiadomości do powiadomień dotyczących wiadomości.

Platforma autouzupełniania

Tworzenie konta, logowanie i transakcje z użyciem karty kredytowej zajmują czas i są podatne na błędy. Użytkownicy mogą łatwo się frustrować, jeśli aplikacje tego typu wymagają ich powtarzalnych zadań.

Android 8.0 (poziom interfejsu API 26) umożliwia wypełnianie formularzy, np. logowanie i formularzy kart kredytowych jest łatwiejsze dzięki wdrożeniu platformy autouzupełniania. Istniejące i nowe aplikacje współpracują z ramami automatycznego wypełniania po tym, jak użytkownik wyrazi zgodę na automatyczne wypełnianie.

Możesz podjąć kilka działań, aby zoptymalizować działanie aplikacji w ramach tej platformy. Więcej informacji znajdziesz w omówieniu ramowego rozwiązania do autouzupełniania.

Czcionki do pobrania

Android 8.0 (poziom interfejsu API 26) i bibliotek pomocniczych Androida 26 umożliwiają żądanie czcionek z aplikacji dostawcy zamiast dołączania czcionek do pliku APK lub zezwalania na pobieranie czcionek przez plik APK. Ta funkcja zmniejsza rozmiar pliku APK, zwiększa rozmiar aplikacji odsetek instalacji i pozwala wielu aplikacjom korzystać z tej samej czcionki.

Więcej informacji o pobieraniu czcionek znajdziesz w artykule Czcionki do pobrania.

Czcionki w formacie XML

Android 8.0 (poziom API 26) wprowadza nową funkcję – Czcionki w języku XML, pozwala używać czcionek jako zasobów. Oznacza to, że nie trzeba grupować czcionek jako zasoby. Czcionki są kompilowane w pliku R i automatycznie dostępne w systemie jako zasób. Następnie możesz uzyskać do nich dostęp za pomocą nowego typu zasobu, font.

Biblioteka wsparcia 26 zapewnia pełną obsługę tej funkcji na urządzeniach z interfejsem API w wersji 14 lub nowszej.

Więcej informacji o używaniu czcionek jako zasobów i pobieraniu czcionek systemowych znajdziesz w artykule Czcionki w pliku XML.

Automatyzacja rozmiaru TextView

Android 8.0 (poziom interfejsu API 26) umożliwia automatyczne powiększanie i zmniejszanie rozmiaru tekstu na podstawie rozmiaru elementu TextView. Oznacza to, że znacznie łatwiej jest zoptymalizować rozmiar tekstu na różnych ekranach lub w przypadku treści dynamicznych. Więcej informacji o automatycznym dostosowywaniu rozmiaru TextView w Androidzie 8.0 znajdziesz w artykule Autorskie dostosowywanie rozmiaru TextView.

Ikony adaptacyjne

Android 8.0 (poziom interfejsu API 26) wprowadza ikony adaptacyjnego programu uruchamiającego. Ikony adaptacyjne obsługują efekty wizualne i mogą wyświetlać różne kształty na różnych modelach urządzeń. Aby dowiedzieć się, jak: tworzenie ikon adaptacyjnych, zapoznaj się z artykułem na temat ikon adaptacyjnych Google.

Zarządzanie kolorami

Deweloperzy aplikacji do przetwarzania obrazu na Androida mogą teraz korzystać z nowych urządzeń z ekranem obsługującym szeroką gamę kolorów. Wyświetlanie szerokiej gamy obrazów, aplikacje muszą mieć włączoną flagę w pliku manifestu (dla każdej aktywności) i wczytuj mapy bitowe z osadzonym szerokim profilem kolorów (AdobeRGB, zdjęcie Pro RGB, DCI-P3 itp.).

Interfejsy API WebView

Android 8.0 udostępnia kilka interfejsów API, które ułatwiają zarządzanie obiekty WebView, które wyświetlają treści z internetu w Twojej aplikacji. Te interfejsy API, które zwiększają stabilność i bezpieczeństwo aplikacji, obejmują :

  • Interfejs API wersji
  • Interfejs API Google Safe Browsing
  • Interfejs Termination Handle API
  • Interfejs Renderer Importance API

Więcej informacji o korzystaniu z tych interfejsów API znajdziesz w artykule Zarządzanie komponentami WebView.

Klasa WebView zawiera teraz interfejs API Bezpiecznego przeglądania, który zwiększa bezpieczeństwo przeglądania internetu. Więcej informacji znajdziesz w interfejsie API Bezpiecznego przeglądania Google.

Przypinanie skrótów i widżetów

Android 8.0 (poziom interfejsu API 26) wprowadza przypinanie skrótów i widżetów w aplikacji. W aplikacji możesz tworzyć przypięte skróty i widżety dla obsługiwanych programów uruchamiania, z uwzględnieniem zgody użytkownika.

Więcej informacji: Przypinanie skrótów i widżetów przewodnik po funkcjach.

Maksymalny format obrazu

W Androidzie 8.0 (poziom interfejsu API 26) wprowadzono zmiany w konfigurowaniu maksymalnego formatu obrazu aplikacji.

Po pierwsze, Android 8.0 wprowadza atrybut maxAspectRatio, za pomocą którego możesz ustawić maksymalny współczynnik kształtu obrazu aplikacji. Dodatkowo w Androidzie 8.0 i nowszych domyślny maksymalny współczynnik proporcji aplikacji jest domyślnym współczynnikiem proporcji urządzenia, na którym aplikacja jest uruchomiona.

Więcej informacji o deklarowaniu maksymalnego formatu obrazu znajdziesz w sekcji Obsługa wielu ekranów.

Obsługa kilku wyświetlaczy

Począwszy od Androida 8.0 (poziom interfejsu API 26) platforma oferuje i obsługują wiele wyświetlaczy. Jeśli aktywność obsługuje tryb wielookienkowy i działa na urządzeniu z wieloma wyświetlaczami, użytkownicy mogą przenosić ją z jednego wyświetlacza na drugi. Gdy aplikacja uruchamia aktywność, może określać, na którym wyświetlaczu ma być uruchamiana aktywność.

Uwaga: jeśli aktywność obsługuje trybu wielu okien, Android 8.0 automatycznie i obsługuje wiele wyświetlaczy. Przetestuj aplikację, aby aby sprawdzić, czy działa prawidłowo w środowisku z wieloma wyświetlaczami.

Tylko jedno działanie w danym momencie może być wznowione, nawet jeśli ma kilka wyświetlaczy. Aktywność, na której skupia się użytkownik, jest wznowiona. Wszystkie inne widoczne aktywności są wstrzymane, ale nie zatrzymane. Więcej informacji o cyklu życia aktywności, gdy jest widocznych kilka aktywności, znajdziesz w artykule Cykl życia aktywności w wielu oknach.

Gdy użytkownik przeniesie aktywność z jednego wyświetlacza na inny, system zmieni jej rozmiar i w razie potrzeby wprowadzi zmiany w czasie działania. Aktywność może sama obsłużyć zmianę konfiguracji lub pozwolić systemowi zniszczyć proces zawierający aktywność i odtworzyć go z nowymi wymiarami. Więcej informacji znajdziesz w artykule Zarządzanie zmianami konfiguracji.

ActivityOptions udostępnia 2 nowe metody obsługi wiele wyświetlaczy:

setLaunchDisplayId()
Określa, na którym wyświetlaczu powinna być wyświetlana aktywność po jej uruchomieniu.
getLaunchDisplayId()
Zwraca ekran bieżącego uruchomienia aktywności.

Powłoka adb jest rozszerzona i obsługuje wiele wyświetlaczy. Polecenia shell start można teraz używać do uruchamiania aktywności, oraz określić docelowy sposób wyświetlania:

adb shell start <activity_name> --display <display_id>

Ujednolicone marginesy i odstępy

Android 8.0 (poziom interfejsu API 26) ułatwia określanie sytuacji, w których przeciwne strony elementu View mają taki sam margines lub dopełnienie. W szczególności możesz teraz używać następujących atrybutów w pliku XML układu pliki:

Uwaga: jeśli dostosujesz logikę aplikacji do obsługi różnych języków i kultur, w tym kierunku tekstu, pamiętaj, że te atrybuty nie mają wpływu na wartości atrybutów layout_marginStart, layout_marginEnd, paddingStart ani paddingEnd. Te wartości możesz ustawić samodzielnie, oprócz nowe atrybuty układu pionowego i poziomego, by zapewnić zachowanie układu w zależności od kierunku tekstu.

Wskaźnik

Niektóre aplikacje, takie jak gry, pulpit zdalny i klienci wirtualizacji, znacznie lepiej działają, gdy mają kontrolę nad wskaźnikiem myszy. Przechwytywanie wskaźnika to nowa funkcja w Androidzie 8.0 (interfejs API na poziomie 26), która zapewnia taką kontrolę, przekazując wszystkie zdarzenia myszy do widoku w aplikacji.

Począwszy od Androida 8.0, element View w aplikacji może żądać rejestrowania wskazań i zdefiniować obiekt do nasłuchiwania, który będzie przetwarzać zdarzenia związane z wskazaniem. w tym trybie wskaźnik myszy jest ukryty. Widok może zwolnić przechwytywanie wskaźnika, gdy nie będzie już potrzebować informacji o myszy. System może też zwolnić przechwytywanie kursora, gdy widok straci na chwilę fokus, np. gdy użytkownik otworzy inną aplikację.

Informacje o korzystaniu z tej funkcji w aplikacji znajdziesz w artykule Rejestrowanie kursora.

Kategorie aplikacji

Android 8.0 (poziom interfejsu API 26) umożliwia każdej aplikacji zadeklarowanie kategorii, do której się kwalifikuje (w stosownych przypadkach). Te kategorie służą do grupowania aplikacji o podobnym przeznaczeniu lub działaniu, gdy są one prezentowane użytkownikom, np. w ramach zużycia danych, zużycia baterii lub zużycia miejsca na dane. Kategorię aplikacji możesz zdefiniować, ustawiając atrybut android:appCategory w tagu manifestu <application>.

Program uruchamiający Androida TV

Android 8.0 (poziom API 26) zawiera nowe, skoncentrowane na treści Ekran główny Androida TV, który jest dostępny obraz emulatora Androida TV i obrazu Nexus Playera na Androida 8.0. Nowy ekran główny zawiera porządek treści wideo w wierszach odpowiadających kanałom, z których każdy zawiera programy aplikacji na w systemie. Aplikacje mogą publikować wiele kanałów, a użytkownicy mogą wybrać, które z nich co ma być widoczne na ekranie głównym. Ekran główny Androida TV zawiera też wiersz „Obejrzyj dalej”, w którym wyświetlane są programy z aplikacji na podstawie nawyków użytkownika. Aplikacje mogą też podglądy filmów, które są odtwarzane automatycznie, gdy użytkownik zaznaczy program. Interfejsy API służące do wypełniania kanałów i programów są częścią interfejsów TvProvider API, które są rozpowszechniane jako moduł biblioteki obsługi Androida w wersji 8.0.

AnimatorSet

Począwszy od Androida 8.0 (poziom interfejsu API 26) interfejs API AnimatorSet obsługuje teraz przewijanie i odtwarzanie wstecz. Przewijanie pozwala ustawić konkretną pozycję animacji w czasie rzeczywistym. Odtwarzanie odwrotne jest przydatne, jeśli aplikacja zawiera animacje w informacjach o czynnościach, które można cofnąć. Zamiast definiować dwie osobne animacje sety, możesz grać odwrotnie.

Wpisywanie i poruszanie się po ekranie

Klawiatura – grupy nawigacyjne

Jeśli w aplikacji występuje złożona hierarchia widoku, np. taka jak na rysunku 2, rozważ uporządkowanie grup elementów interfejsu w klastery, aby ułatwić poruszanie się między nimi za pomocą klawiatury. Użytkownicy mogą nacisnąć klawisze Meta + Tab lub klawisz wyszukiwania + Tab Chromebooków, które umożliwiają przechodzenie z jednego klastra do drugiego. Dobre przykłady m.in.: panele boczne, paski nawigacyjne, główne obszary treści i elementy. który może zawierać wiele elementów potomnych.

Przykładowa aktywność obejmująca 5 klastrów nawigacyjnych, po których użytkownik może się poruszać za pomocą skrótu klawiaturowego. Grupy te są wyświetlane w takim porządku: panel górny, panel boczny, obszar głównej treści, panel dolny i pływający przycisk czynności.
Rysunek 2. Aktywność zawierająca 5 klastrów nawigacji

Aby utworzyć klaster z elementu View lub ViewGroup, ustaw atrybut android:keyboardNavigationCluster na true w pliku XML układu elementu lub przekaż wartość true do setKeyboardNavigationCluster() w logice interfejsu użytkownika aplikacji.

Uwaga: klastry nie mogą być zagnieżdżone, ale niezagnieżdżone klastry mogą pojawiać się na różnych poziomach hierarchii. Jeśli spróbujesz zagnieżdżonych klastrów, platforma traktuje tylko te ViewGroup element jako klaster.

Na urządzeniach z ekranami dotykowymi możesz ustawić ViewGroup obiektu android:touchscreenBlocksFocus od elementu true do zezwalaj na poruszanie się do niego i z niego w ramach tylko klastra. Jeśli zastosujesz tę konfigurację w klastrze, użytkownicy nie będą mogli używać klawisza Tab ani klawiszy strzałek do przechodzenia do klastra i z niego. Zamiast tego muszą używać kombinacji klawiszy do nawigacji po klastrze.

Wyświetlanie domyślnego punktu skupienia

W Androidzie 8.0 (poziom interfejsu API 26) możesz przypisać element View, który powinien zostać aktywowany po wznowieniu (powtórnie utworzonej) aktywności i po naciśnięciu przez użytkownika klawisza nawigacyjnego na klawiaturze, takiego jak klawisz tabulacji. Aby zastosować tę opcję „Domyślnie zaznaczone” ustaw wartość elementu View android:focusedByDefault do true w pliku XML układu zawierającego element interfejsu lub przekazać w true do setFocusedByDefault() w do tworzenia interfejsu aplikacji.

Generowanie mowy

Aktywności i usługi mogą korzystać z wystąpień TextToSpeech, aby dyktować i wymawiać treści. Stan na Android 8.0 (poziom interfejsu API 26) aplikacja może uzyskiwać dokładniejsze informacje o czasie. o tym, kiedy mechanizm zamiany tekstu na mowę zaczyna wypowiadać pojedyncze syntezowane słowa, jeśli tylko wyszukiwarka udostępnia te informacje. Możesz używać tej funkcji, aby zwrócić uwagę na konkretne słowa, gdy silnik zamiany tekstu na mowę je wypowiada.

Aby korzystać z tych ulepszeń mechanizmu zamiany tekstu na mowę w aplikacji, zarejestruj wystąpienia UtteranceProgressListener. W ramach rejestracji, umieść moduł obsługi onRangeStart() .

Mechanizm zamiany tekstu na mowę rangeStart(), aby nagrać moment, w którym oczekuje się odtworzenia dźwięku z określonego zakresu tekstu aby rozpocząć. Gdy rozpocznie się odtwarzanie dźwięku dla tego zakresu tekstu, zostanie wykonana metoda onRangeStart()aplikacji. Aplikacja może odpowiedzieć na to wywołanie zwrotne, np. wyróżnienia zakresu tekstu powiązanego z wypowiedź.

Więcej informacji o śledzeniu postępu odtwarzania zamiany tekstu na mowę wyszukiwarka, zobacz klasę UtteranceProgressListener odwołania.

System

Nowe detektory StrictMode

Android 8.0 (interfejs API na poziomie 26) zawiera 3 nowe detektory trybu ścisłego, które pomagają wykrywać potencjalne błędy w aplikacji:

Dane w pamięci podręcznej

Android 8.0 (poziom interfejsu API 26) zapewnia lepsze wskazówki i lepsze sposoby obsługi danych w pamięci podręcznej. Każdy aplikacji otrzymuje teraz limit miejsca na dysku na dane w pamięci podręcznej. Metoda ta zwraca getCacheQuotaBytes(UUID)

Gdy system musi zwolnić miejsce na dysku, najpierw usuwa pliki z pamięci podręcznej aplikacji które przekraczają przydzielony limit. Jeśli więc dane w pamięci podręcznej nie przekroczą przydzielonego limitu, będą jednymi z ostatnich, które zostaną usunięte z systemu. Gdy system decyduje, które pliki w pamięci podręcznej ma usunąć w aplikacji, najpierw bierze pod uwagę najstarsze pliki (według daty modyfikacji).

Dostępne są też 2 nowe zachowania, które możesz włączyć w poszczególnych katalogach, aby kontrolować, jak system będzie zwalniać pamięć podręczną:

  • StorageManager.setCacheBehaviorAtomic() może wskazywać, że katalog i cała jego zawartość powinny zostać usunięte jako pojedyncza jednostka.
  • setCacheBehaviorTombstone(File, boolean) może wskazywać, że zamiast usuwania plików w katalogu należy je skrócić do 0 bajtów, pozostawiając pusty plik w nienaruszonym stanie.

I wreszcie, gdy musisz przydzielić miejsce na dysku na duże pliki, rozważ zastosowanie nowej allocateBytes(FileDescriptor, long) API, który zostanie automatycznie wyczyszczony. zapisane w pamięci podręcznej pliki należące do innych aplikacji (w razie potrzeby). Przy podejmowaniu decyzji o tym, czy urządzenia ma wystarczającą ilość miejsca na nowe dane, wywołaj getAllocatableBytes(UUID) zamiast używać getUsableSpace(), ponieważ pierwszy z nich uwzględnia wszystkie dane z pamięci podręcznej które system może usunąć w Twoim imieniu.

stronicowanie dostawcy treści

Zaktualizowaliśmy dostawców treści, aby umożliwić wczytywanie dużych zbiorów danych po jednej stronie naraz. Na przykład aplikacja do zdjęć zawierająca tysiące obrazów może wysłać zapytanie o podzbiór danych, który ma być wyświetlany na stronie. Każda strona wyników zwracanych przez dostawcę treści jest reprezentowana przez jeden kursor obiektu. Aby korzystać z tej funkcji, zarówno klient, jak i dostawca muszą zaimplementować podział na strony.

Szczegółowe informacje o zmianach dotyczących dostawców treści znajdziesz na stronie ContentProvider i ContentProviderClient

Prośby o odświeżenie treści

ContentProvider i ContentResolver zajęcia zawiera teraz: refresh(), która ułatwia klientom ustalenie, czy informacje, o które proszą, są aktualne.

Możesz dodać niestandardową funkcję odświeżania treści, rozszerzając ContentProvider Upewnij się, że zastąpiono refresh() metoda do zwrócenia true, wskazując klientom Twojego dostawcy, że zostały przez Ciebie podjęte próby , aby samodzielnie odświeżyć dane.

Aplikacja kliencka może wyraźnie poprosić o odświeżenie treści, wywołując inną metodą, refresh() Podczas wywoływania tej metody podaj identyfikator URI danych, które mają zostać odświeżone.

Uwaga: ponieważ możesz wysyłać żądania dotyczące danych przez sieć, wywołuj funkcję refresh() po stronie klienta tylko wtedy, gdy masz wyraźne wskazania, że dane są nieaktualne. Najczęstszą przyczyną wykonywania tego typu odświeżania treści jest przesunięcie palcem w dół w celu odświeżenia, które wyraźnie prosi bieżące UI o wyświetlenie aktualnych treści.

Ulepszenia JobScheduler

Android 8.0 (poziom interfejsu API 26) wprowadza kilka ulepszeń w JobScheduler. Te ulepszenia ułatwią Twojej aplikacji aby zachować zgodność z nowym kontekstem i ograniczania wykonywania zadań, ponieważ za pomocą zaplanowanych zadań usług w tle ani ukrytych odbiorników.

Zmiany w JobScheduler:

  • Możesz teraz powiązać kolejkę zadań z zaplanowanym zadaniem. Aby dodać element roboczy do: kolejka zadania, wywołanie JobScheduler.enqueue() Gdy zadanie jest wykonywane, może pobrać oczekujące zadanie z kolejki i je przetworzyć. Ta funkcja obsługuje wiele przypadków użycia, które wcześniej wymagały wywołania usługi w tle, zwłaszcza usług implementujących IntentService.
  • Biblioteka obsługi Androida 26.0.0 zawiera nową klasę JobIntentService, która zapewnia te same funkcje co IntentService, ale w przypadku Androida 8.0 (poziom interfejsu API 26) lub nowszego używa zadań zamiast usług.
  • Możesz teraz dzwonić JobInfo.Builder.setClipData() powiązanie elementu ClipData z zadaniem. Ta opcja umożliwia powiązanie uprawnień URI z zadaniem w sposób podobny do tego, w jaki uprawnienia te mogą być przekazywane do Context.startService(). Możesz też używać uprawnień przyznawanych identyfikatorowi URI z intencjami na temat kolejek prac.
  • Zaplanowane zadania obsługują teraz kilka nowych ograniczeń:
    JobInfo.isRequireStorageNotLow()
    Zadanie nie jest wykonywane, jeśli na urządzeniu brakuje miejsca.
    JobInfo.isRequireBatteryNotLow()
    Zadanie nie jest wykonywane, jeśli poziom baterii jest na progu krytycznym lub poniżej tego progu. Jest to poziom, przy którym urządzenie wyświetla okno systemowe Ostrzeżenie o niskim stanie baterii.
    NETWORK_TYPE_METERED
    Zadanie wymaga taryfowego połączenia z internetem, podobnie jak większość planów danych komórkowych.

Niestandardowy magazyn danych

Android 8.0 (poziom interfejsu API 26) umożliwia wybranie niestandardowego magazynu danych dla preferencji. Może to być przydatne, jeśli aplikacja przechowuje preferencje w chmurze lub lokalnej bazie danych albo jeśli preferencje są specyficzne dla urządzenia. Więcej informacji na temat: wdrożenia magazynu danych, zapoznaj się z artykułem Magazyn danych niestandardowych.

Ulepszenia multimediów

VolumeShaper

Jest nowa klasa VolumeShaper. Użyj pozwala uruchamiać krótkie, automatyczne przejścia Więcej informacji znajdziesz w artykule Kontrolowanie amplitudy za pomocą VolumeShaper.

Ulepszenia dotyczące aktywności audio

Aplikacje audio udostępniają wyjście audio urządzenia, żądając i rezygnując z fokusu. Aplikacja obsługuje zmiany w koncentracji, uruchamiając lub zatrzymując odtwarzanie albo zmniejszając głośność. Dostępne są nowe zajęcia: AudioFocusRequest. Użycie tej klasy jako parametru funkcji requestAudioFocus(), aplikacje mają nowe możliwości w zakresie radzenia sobie ze zmianami ostrości dźwięku: automatyczne wyciszanie oraz opóźnionego wzmocnienia ostrości.

Dane dotyczące mediów

Nowa metoda getMetrics() zwraca obiekt PersistableBundle zawierający informacje o konfiguracji i wydajności wyrażone jako mapa atrybutów i wartości. Metoda getMetrics() jest zdefiniowana dla tych klas mediów:

Dane są zbierane osobno w przypadku każdej instancji i pozostają w niej przez cały czas jej działania. Jeśli nie ma dostępnych danych, metoda zwraca wartość null. Rzeczywiste wskaźniki zależą od klasy.

MediaPlayer

Począwszy od Androida 8.0 (poziom interfejsu API 26) MediaPlayer może odtwarzać treści z ochroną DRM, materiał i multimedia zaszyfrowane na poziomie próbki HLS.

Android 8.0 wprowadza nowy, przeciążony Polecenie seekTo(), które udostępnia szczegółowe informacje podczas przewijania do klatki. Zawiera on drugi parametr, który określa tryb wyszukiwania:

  • SEEK_PREVIOUS_SYNC przenosi pozycję multimediów do synchronizowanego (lub kluczowego) klatki powiązanej ze źródłem danych, które znajduje się tuż przed lub w określonym momencie.
  • SEEK_NEXT_SYNC przenosi pozycję multimediów do synchronizowanego (lub kluczowego) klatki powiązanego ze źródłem danych, które znajduje się tuż po lub w danym momencie.
  • SEEK_CLOSEST_SYNC przenosi pozycję multimediów do ramki synchronizacji (klucza) powiązane ze źródłem danych, które znajduje się najbliżej lub w danym momencie.
  • SEEK_CLOSEST przenosi pozycję multimediów do klatki (niekoniecznie podczas synchronizacji lub ramce kluczowej) powiązanej ze źródłem danych, które znajduje się najbliżej lub w określonym czasie.

Podczas ciągłego przewijania aplikacje powinny używać dowolnego z trybów SEEK_ zamiast trybu SEEK_CLOSEST, który działa stosunkowo wolniej, ale może być bardziej precyzyjny.

MediaRecorder

  • MediaRecorder obsługuje teraz format MPEG2_TS, który jest przydatny do strumieniowego przesyłania danych:

    Kotlin

    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS)

    Java

    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS);

    zobacz MediaRecorder.OutputFormat

  • MediaMuxermoże teraz obsługiwać dowolną liczbę strumieni audio i wideo. Nie musisz już ograniczać się do jednej ścieżki audio ani jednej ścieżki wideo. Użyj addTrack(), aby zmiksować dowolną liczbę ścieżek.
  • MediaMuxer może też dodać co najmniej 1 ścieżkę metadanych zawierającą zdefiniowane przez użytkownika informacje na poziomie poszczególnych klatek. Format metadanych jest określany przez aplikację. ścieżka metadanych jest obsługiwana tylko w przypadku kontenerów MP4.

Metadane mogą być przydatne do przetwarzania offline. Na przykład sygnały żyroskopowe z może wykorzystać czujnik do stabilizacji wideo.

Podczas dodawania ścieżki metadanych jej format MIME musi zaczynać się od prefiksu „application/”. Zapisywanie metadanych przebiega tak samo jak zapisywanie danych wideo/dźwięku, z tym że dane nie pochodzą z MediaCodec. Zamiast tego aplikacja przekazuje parametr ByteBuffer z powiązanym sygnaturą czasową do metody writeSampleData(). Sygnatura czasowa musi obejmować tę samą podstawę czasową co ścieżki wideo i audio.

Wygenerowany plik MP4 używa TextMetaDataSampleEntry zdefiniowanego w sekcji 12.3.3.2 specyfikacji ISOBMFF, aby sygnalizować format mime metadanych. Gdy używasz MediaExtractor do wyodrębnienia pliku z ścieżką metadanych, format mime metadanych zostanie wyodrębniony do pliku MediaFormat.

Ulepszony dostęp do plików multimedialnych

Storage Access Framework (SAF) umożliwia aplikacjom udostępnianie niestandardowego DocumentsProvider, który może zapewniać dostęp do plików w źródle danych innym aplikacjom. Dostawca dokumentów może nawet udostępnić dostęp do plików znajdujących się w magazynie sieciowym lub używających protokołu takiego jak Media Transfer Protocol (MTP).

Jednak dostęp do dużych plików multimedialnych ze zdalnego źródła danych wiąże się z pewnymi wyzwaniami:

  • Odtwarzacze multimediów wymagają dostępu do pliku od dostawcy dokumentów. Jeśli duży plik multimedialny znajduje się w zdalnym źródle danych, funkcja dostawca dokumentów musi pobrać wszystkie dane z wyprzedzeniem i utworzyć zrzut deskryptor pliku. Odtwarzacz multimediów nie może odtworzyć pliku bez jego opisu, więc odtwarzanie nie może się rozpocząć, dopóki dostawca dokumentów nie zakończy pobierania pliku.
  • Menedżery kolekcji multimediów, takie jak aplikacje do zdjęć, muszą przejść przez serię identyfikatorów URI dostępu, aby uzyskać dostęp do multimediów przechowywanych na zewnętrznej karcie SD za pomocą folderów ograniczonych. Ten wzorzec dostępu umożliwia przeprowadzanie masowych operacji na nośnikach, takich jak przenoszenie, kopiowanie i usuwanie – dość wolno.
  • Menedżerowie kolekcji multimediów nie mogą określić lokalizacji dokumentu na podstawie jego identyfikatora URI. Utrudnia to użytkownikom wybór tego typu aplikacji. gdzie zapisać plik multimedialny.

Android 8.0 rozwiązuje każde z tych problemów, zwiększając dostęp do pamięci masowej Platforma.

Dostawcy niestandardowych dokumentów

Począwszy od Androida 8.0, platforma Storage Access Framework umożliwia dokumenty niestandardowe dostawców, aby tworzyć deskryptory plików znajdujących się w lokalizacji zdalnego źródła danych. SAF może otworzyć plik, aby uzyskać natywny plik z możliwością wyszukiwania deskryptor. Następnie SAF wysyła żądania pojedynczych bajtów do dostawcy dokumentów. Ta funkcja umożliwia dostawcy dokumentów zwrócenie dokładnie tego zakresu bajtów, którego zażądała aplikacja odtwarzacza multimediów, zamiast wcześniejszego zapisania całego pliku w pamięci podręcznej.

Aby użyć tej funkcji, musisz wywołać nowy Metoda StorageManager.openProxyFileDescriptor(). Metoda openProxyFileDescriptor() akceptuje obiekt ProxyFileDescriptorCallback jako wywołanie zwrotne. SAF wywołuje tę funkcję z powrotem za każdym razem, gdy aplikacja klienta wykonuje operacje na pliku na podstawie deskryptora pliku zwróconego przez dostawcę dokumentów.

Bezpośredni dostęp do dokumentu

W Androidzie 8.0 (poziom interfejsu API 26) możesz używać Metoda getDocumentUri() do uzyskać identyfikator URI odwołujący się do tego samego dokumentu co podany mediaUri. Zwracany identyfikator URI jest jednak obsługiwany przez parametr DocumentsProvider, więc menedżerowie kolekcji multimediów mogą uzyskać dostęp do dokumentu bezpośrednio, bez konieczności przechodzenia przez drzewa katalogów ograniczonych. Dzięki temu menedżerowie multimediów mogą znacznie szybciej wykonywać operacje na plikach dokumentu.

Uwaga: metoda getDocumentUri() tylko wykrywa pliki multimedialne, ale nie przyznaje aplikacjom uprawnień do dostępu do tych plików. Aby dowiedzieć się, jak uzyskać dostęp uprawnień do plików multimedialnych znajdziesz w dokumentacji referencyjnej.

Ścieżki do dokumentów

Jeśli używasz interfejsu Storage Access Framework w Androidzie 8.0 (poziom interfejsu API 26), możesz użyć metody findDocumentPath(), która jest dostępna w klasach DocumentsContractDocumentsProvider, aby określić ścieżkę od katalogu głównego systemu plików do zadanego identyfikatora dokumentu. Metoda zwraca tę ścieżkę w obiekcie DocumentsContract.Path. Gdy plik jest niedostępny system ma wiele zdefiniowanych ścieżek do tego samego dokumentu, metoda zwraca ścieżka, która jest najczęściej używana do dotarcia do dokumentu o podanym identyfikatorze.

Ta funkcja jest szczególnie przydatna w tych sytuacjach:

  • Aplikacja używa opcji „Zapisz jako” które pokazuje lokalizację konkretnego dokumentu.
  • Aplikacja wyświetla foldery w widoku wyników wyszukiwania i musi wczytać dokumenty podrzędne znajdujące się w określonym folderze, jeśli użytkownik go wybierze.

Uwaga: jeśli aplikacja ma uprawnienia dostępu tylko do niektórych dokumentów na ścieżce, wartość zwracana przez findDocumentPath() obejmuje tylko foldery i dokumenty, do których aplikacja ma dostęp.

Monitorowanie odtwarzania dźwięku

Usługa systemowa AudioManager przechowuje listę aktywnych obiektów AudioPlaybackConfiguration, z których każdy zawiera informacje o konkretnej sesji odtwarzania dźwięku. Aplikacja może pobierz zestaw obecnie aktywnych konfiguracji, wywołując getActivePlaybackConfigurations()

W Androidzie 8.0 (poziom interfejsu API 26) możesz rejestrować wywołanie zwrotne w jej przypadku, Zmieniły się AudioPlaybackConfiguration obiekty. Aby to zrobić, wywołaj funkcję registerAudioPlaybackCallback(), przekazując instancję AudioManager.AudioPlaybackCallback. Klasa AudioManager.AudioPlaybackCallback zawiera metodę onPlaybackConfigChanged(), którą system wywołuje, gdy zmienia się konfiguracja odtwarzania dźwięku.

Łączność

Rozpoznawalność Wi-Fi

Android 8.0 (interfejs API na poziomie 26) obsługuje Wi-Fi Aware, który jest oparty na specyfikacji Neighbor Awareness Networking (NAN). Na urządzeniach z Sprzęt, aplikacje i urządzenia w pobliżu obsługujące Wi-Fi Aware mogą wykrywać i komunikować się z innymi przez sieć Wi-Fi bez punktu dostępu do internetu. Za pomocą naszego sprzętu jak najszybsze wdrożenie technologii Wi-Fi Aware na urządzeniach. Dla: informacje o integrowaniu Wi-Fi Aware z aplikacją znajdziesz na stronie Wi-Fi Aware.

Bluetooth

Android 8.0 (poziom interfejsu API 26) wzbogaca obsługę Bluetootha na platformie o funkcje:

  • Obsługa standardu AVRCP 1.4, który umożliwia przeglądanie biblioteki utworów.
  • Obsługa standardu Bluetooth Low-Energy (BLE) 5.0.
  • Integracja kodeka Sony LDAC ze stosem Bluetooth.

Parowanie urządzenia towarzyszącego

Android 8.0 (poziom interfejsu API 26) udostępnia interfejsy API, które umożliwiają dostosowywanie okna dialogowego z prośbą o sparowanie podczas próby sparowania z urządzeniami towarzyszącymi przez Bluetooth, BLE i Wi-Fi. Więcej informacji: Urządzenie towarzyszące Parowanie.

Więcej informacji o używaniu Bluetooth na urządzeniach z Androidem znajdziesz w przewodniku Bluetooth. Informacje o zmianach w Bluetooth dotyczących Androida 8.0 (poziom interfejsu API 26) znajdziesz w sekcji Bluetooth na stronie Zmiany w zachowaniu Androida 8.0.

Udostępnianie

Inteligentne udostępnianie

Android 8.0 (poziom interfejsu API 26) uczy się spersonalizowane udostępnianie w Twoich preferencjach i lepiej rozumie każdy typ treści, aplikacje, którym chcesz udostępnić treści. Jeśli na przykład użytkownik zrobi zdjęcie rachunku, Android 8.0 może zasugerować aplikację do śledzenia wydatków; jeśli użytkownik robi selfie, czy też w mediach społecznościowych lepiej radzi sobie z tym obrazem. Android 8.0 automatycznie uczy się tych wzorów na podstawie spersonalizowanych preferencji użytkowników.

Inteligentne udostępnianie działa w przypadku typów treści innych niż image, takich jak audio, video, text, URL itp.

Aby włączyć inteligentne udostępnianie, dodaj do intencji, która udostępnia treści, ArrayList adnotacji ciągu znaków (maksymalnie 3). Adnotacje powinny opisywać główne elementy lub tematy zawarte w treści. Poniższy przykładowy kod pokazuje, jak dodać adnotacje do intencji:

Kotlin

val annotations: ArrayList<String> = arrayListOf(
        "topic1",
        "topic2",
        "topic3"
)

intent.putStringArrayListExtra(
        Intent.EXTRA_CONTENT_ANNOTATIONS,
        annotations
)

Java

ArrayList<String> annotations = new ArrayList<>();

annotations.add("topic1");
annotations.add("topic2");
annotations.add("topic3");

intent.putStringArrayListExtra(
    Intent.EXTRA_CONTENT_ANNOTATIONS,
    annotations
);

Szczegółowe informacje na temat adnotacji dotyczących inteligentnego udostępniania znajdziesz w artykule EXTRA_CONTENT_ANNOTATIONS

Klasyfikator tekstu

Na zgodnych urządzeniach aplikacje mogą używać nowego klasyfikatora tekstu, aby sprawdzić, czy ciąg znaków pasuje do znanego typu elementu klasyfikatora, i uzyskać sugerowane alternatywy wyboru. Do jednostek rozpoznawanych przez system należą adresy, adresy URL, numerów telefonów i adresów e-mail. Więcej informacji: TextClassifier

Ułatwienia dostępu

Android 8.0 (poziom interfejsu API 26) obsługuje kilka nowych funkcji ułatwień dostępu dla deweloperów, którzy tworzą własne usługi ułatwień dostępu:

. Aby dowiedzieć się więcej o ułatwieniach dostępu w aplikacji, Więcej informacji: Ułatwienia dostępu.

Prywatność i bezpieczeństwo

Uprawnienia

Android 8.0 (poziom interfejsu API 26) wprowadza kilka nowych uprawnień związanych z telefonami:

Te uprawnienia są klasyfikowane jako niebezpieczne Należą do nich PHONE grupę uprawnień.

Nowe interfejsy API dostępu do konta i odkrywania

Android 8.0 (poziom API 26) wprowadza kilka ulepszeń, aplikacje uzyskują dostęp do kont użytkowników. Na kontach, którymi zarządza podmioty uwierzytelniające mogą używać własnych zasad do ukrywania kont przed lub ujawnianie kont aplikacji. System Android śledzi aplikacje, które mogą uzyskać dostęp do określonego konta.

W poprzednich wersjach Androida aplikacje, które chciały śledzić listę Konta użytkowników muszą otrzymywać aktualizacje dotyczące wszystkich kont, w tym kont z niepowiązanych typów. Android 8.0 wprowadza metodę addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[]), która pozwala aplikacjom określić listę typów kont, dla których mają być otrzymywane zmiany dotyczące kont.

Zmiany w interfejsie API

Usługa AccountManager udostępnia 6 nowych metod, które pomagają uwierzytelniającym zarządzać tym, które aplikacje mogą wyświetlać dane konta:

Android 8.0 (poziom interfejsu API 26) wprowadza 2 specjalne wartości nazwy pakietu, które służą do określania poziomów widoczności aplikacji, które nie zostały ustawione za pomocą metody setAccountVisibility(android.accounts.Account, java.lang.String, int). Wartość PACKAGE_NAME_KEY_LEGACY_VISIBLEwidoczności jest stosowana w przypadku aplikacji, które mają uprawnienie GET_ACCOUNTS i są kierowane na wersje Androida starsze niż 8.0 lub których podpisy są zgodne z autentyfikatorem kierowanym na dowolną wersję Androida. PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE określa domyślną wartość widoczności dla aplikacji, dla których nie została ona wcześniej ustawiona i których nie dotyczy parametr PACKAGE_NAME_KEY_LEGACY_VISIBLE.

Więcej informacji o nowych interfejsach API dostępu do konta i odkrywania znajdziesz w odniesienie do AccountManager i OnAccountsUpdateListener

Testowanie

Testowanie z wykorzystaniem instrumentacji

Android 8.0 (poziom interfejsu API 26) zapewnia dodatkowe wsparcie z testów narzędziowych.

Uruchamianie w procesach aplikacji innych niż domyślne

Możesz teraz określić, że określony test instrumentacji ma być wykonywany w procesie spoza domyślnego procesu aplikacji. Ta konfiguracja jest przydatna, jeśli aplikacja zawiera wiele aktywności, które działają w różnych procesach.

Aby zdefiniować instrumentowanie procesu innego niż domyślny, otwórz plik manifestu, a potem odpowiedni element <instrumentation>. Dodaj parametr android:targetProcess i ustaw jego wartość na jedną z następujące:

  • Nazwa konkretnego procesu.
  • Rozdzielona przecinkami lista nazw procesów.
  • znak wieloznaczny ("*"), który umożliwia uruchomienie instrumentacji w przypadku każdego uruchomionego procesu, który wykonuje kod w pakiecie określonym w atrybucie android:targetPackage.

Podczas wykonywania testu instrumentacji możesz sprawdzić, który proces jest on testowany, wywołując metodę getProcessName().

Raportowanie wyników podczas testu

Teraz możesz zgłaszać wyniki podczas wykonywania testu instrumentacji, a nie po jego zakończeniu, wywołując funkcję addResults().

Pozorowane intencje podczas testów

Aby ułatwić sobie tworzenie izolowanych, niezależnych testów interfejsu aplikacji aktywności, Android 8.0 (poziom API 26) wprowadza Metoda onStartActivity(). Zastępujesz tę metodę w niestandardowej podklasie klasy Instrumentation.ActivityMonitor klasa do obsługi konkretnej intencję wywoływaną przez klasę testową.

Gdy klasa testowa wywołuje intencję, metoda zwraca obiekt stubInstrumentation.ActivityResult zamiast wykonywać intencję. Dzięki tej symulowanej logice intencji w testach możesz skupić się na tym, jak Twoja aktywność przygotowuje i obsługuje intencję, którą przekazujesz innej aktywności lub innej aplikacji.

Środowisko wykonawcze Narzędzia

Optymalizacja platformy

Android 8.0 (poziom interfejsu API 26) wprowadza optymalizacje czasu wykonywania i inne optymalizacje na platformie, które skutkują wieloma ulepszeniami wydajności. Te optymalizacje obejmują równoległe skompresowanie i usuwanie zbędnych danych, wydajniejsze wykorzystanie pamięci oraz lokalność kodu.

Te optymalizacje przyspieszają rozruch oraz zapewniają lepszą wydajność System operacyjny i aplikacje.

Zaktualizowano obsługę języka Java

Android 8.0 (poziom interfejsu API 26) obsługuje kilka dodatkowych interfejsów API OpenJDK Java:

Więcej informacji o klasach i metodach dodanych w tych nowych pakietach znajdziesz w dokumentacji interfejsu API.

Jeśli chcesz używasz funkcji języka Java 8 w Android Studio, pobierz najnowszą wersję przedpremierową.

Zaktualizowane interfejsy ICU4J Android Framework API

Android 8.0 (poziom interfejsu API 26) rozszerza interfejsy API ramy ICU4J na Androida (który jest podzbiorem interfejsów API ICU4J) i udostępnia je deweloperom aplikacji w pakiecie android.icu. Te interfejsy API używają danych lokalizacji dostępnych na urządzeniu. Możesz więc zmniejszyć ilość miejsca zajmowanego przez plik APK, nie kompilując Biblioteki ICU4J w pliku APK.

Tabela 1. Wersje ICU, CLDR i Unicode używane w Androidzie.

Poziom interfejsu Android API Wersja OIOM-a Wersja CLDR Wersja Unicode
Android 7.0 (poziom API 24), Android 7.1 (poziom API 25) 56 28 z Androidem 8.0
Android 8.0 (poziom 26 interfejsu API) 58,2 30.0.3 9.0

Więcej informacji o internacjonalizacji na Androidzie, w tym Obsługa ICU4J, patrz Internacjonalizacja na Androidzie.

Android Enterprise

Wprowadziliśmy nowe funkcje i interfejsy API dla firm na urządzeniach z Androidem 8.0 (poziom interfejsu API 26). Najważniejsze zmiany:

  • Profile służbowe na urządzeniach w pełni zarządzanych umożliwiają przedsiębiorstwom oddzielenie danych służbowych od danych osobistych, a także zarządzanie tymi danymi.
  • Delegowanie interfejsu API umożliwia właścicielom urządzeń i profili przypisywanie zarządzania aplikacją innym aplikacjom.
  • Większa wygoda obsługi administracyjnej (w tym nowe opcji dostosowania) skraca czas konfiguracji.
  • Nowe funkcje kontroli Bluetooth, Wi-Fi, tworzenia kopii zapasowych i zabezpieczeń ułatwiają firmom i zarządzać większą liczbą urządzeń. Logowanie aktywności sieciowej pomaga przedsiębiorstwom śledzić problemy.

Aby dowiedzieć się więcej o tych i innych nowych interfejsach Android Enterprise API i funkcjach, zobacz artykuł na temat Androida w firmach.