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.
Nie zapomnij też sprawdzić Zmiany w działaniu Androida 8.0, dzięki którym dowiesz się, w jakich obszarach zmienia się platforma może mieć wpływ na Twoje aplikacje.
Jakość usług
Tryb obrazu w obrazie
Funkcja obraz w obrazie w Androidzie 8.0
Android 8.0 (poziom interfejsu API 26) umożliwia uruchamianie działań trybie obraz w obrazie (PIP). PIP jest specjalny typ trybu wielu okien głównie do odtwarzania filmów. Tryb PIP był pierwotnie dostępny na tylko na Androidzie TV; Tę funkcję udostępnia Android 8.0 na innych urządzeniach z Androidem.
Gdy jakaś aktywność jest w trybie PIP, jest wstrzymana, ale powinna
nadal pokazuj zawartość. Z tego powodu upewnij się, że aplikacja
nie wstrzymuje odtwarzania w okresie onPause()
. Zamiast tego wstrzymaj film za onStop()
i wznów odtwarzanie za onStart()
. Więcej informacji:
Wiele okien
Cykl życia.
Aby określić, czy aktywność może używać trybu PIP, ustaw
android:supportsPictureInPicture
w pliku manifestu ma wartość prawda.
(Od Androida w wersji 8.0 tryb PIP nie wymaga
android:resizeableActivity
atrybut 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
zgodnie z preferowanym współczynnikiem proporcji.
Istniejące metody PIP opisane w Dodawanie Obraz w obrazie można teraz na wszystkich urządzeniach z Androidem, nie tylko na urządzeniach z Androidem TV. Ponadto Android 8.0 udostępnia poniższe metody obsługi Tryb PIP:
Activity.enterPictureInPictureMode(PictureInPictureParams args)
: Umieszcza aktywność w trybie obrazu w obrazie. Format obrazu aktywności. i inne ustawienia konfiguracji określa args. Jeśli jakiekolwiek pola w args są puste, system używa wartości ustawionych ostatnio, pod tytułemActivity.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ść w trybie PIP jest wstrzymana, ale pozostaje rozpoczęto. 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, gdy jest w trybie PIP.
-
Activity.setPictureInPictureParams()
: Aktualizuje ustawienia konfiguracji PIP aktywności. Jeśli aktywność to jest obecnie w trybie PIP, ustawienia zostaną zaktualizowane; Jest to przydatne, jeśli zmienia się także format obrazu. Jeśli aktywność nie jest w trybie PIP, te ustawienia konfiguracyjne są używane niezależnieenterPictureInPictureMode()
wywołana przez Ciebie metoda.
Powiadomienia
W Androidzie 8.0 (poziom interfejsu API 26) zmieniliśmy wygląd powiadomień na pozwalają łatwiej i spójniej zarządzać powiadomieniami i ustawieniach. Są to:
- 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ć. Informacje o interfejsie do kanałów powiadomień jako kategorii 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 .
- Drzemka: użytkownicy mogą uśpić powiadomienia, co powoduje, że znikają. przez pewien czas, zanim pojawi się ponownie. Powiadomienia pojawiają się ponownie z z takim samym poziomem ważności. Aplikacje mogą być usuwane lub aktualizowane zawieszonego powiadomienia, ale zaktualizowanie uśpionego powiadomienia nie powoduje aby mogła się ponownie pojawić.
- Czasy oczekiwania na powiadomienia: możesz ustawić limit czasu podczas tworzenia
powiadomienie przez
setTimeoutAfter()
Możesz użyć tej metody, aby określić czas, po którym powiadomienie powinno zostać anulowane. W razie potrzeby możesz anulować powiadomienie przed określony czas 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ą IntencjaNotification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES
. System może udostępniać następujące dodatki, aby filtrować ustawienia, które aplikacja musi wyświetlać użytkownikom:EXTRA_CHANNEL_ID
,NOTIFICATION_TAG
iNOTIFICATION_ID
. - odrzucenie powiadomień – użytkownicy mogą samodzielnie odrzucać powiadomienia;
aplikacje mogą je usuwać automatycznie. Możesz określić, kiedy powiadomienie
i dlaczego została odrzucona przez wdrożenie
onNotificationRemoved()
z metodyNotificationListenerService
zajęcia. - Kolory tła: możesz ustawić i włączyć kolor tła dla
powiadomienia. Z tej funkcji należy korzystać tylko w powiadomieniach dotyczących
trwające zadania, które mają kluczowe znaczenie dla użytkownika na pierwszy rzut oka. Dla:
można na przykład ustawić kolor tła powiadomień
wskazówek dojazdu lub połączenia telefonicznego. Możesz też określić
wybranego koloru tła za pomocą funkcji
setColor()
Robię to umożliwia użycie koloru tła powiadomienia:setColorized()
. - Styl wiadomości: w Androidzie 8.0 powiadomienia korzystające z
Wyświetlanie zajęć
MessagingStyle
więcej treści w zwiniętej formie. Należy użyć metodyMessagingStyle
zajęcia dla i powiadomienia o wiadomościach. Możesz też użyć usługi MetodaaddHistoricMessage()
, która pozwala zapewnić kontekst rozmowy poprzez dodanie historyczne wiadomości do powiadomień dotyczących wiadomości.
![Menu powiadomień na urządzeniu z Androidem 8.0 (poziom API 26) przez przytrzymanie.](https://developer.android.google.cn/static/images/about/versions/oreo/notification-long-press.png?authuser=8&hl=pl)
Użytkownicy mogą przytrzymać ikony menu z aplikacjami, by je wyświetlić powiadomienia w Androidzie 8.0.
Platforma autouzupełniania
Utworzenie konta, logowanie się i transakcje kartą kredytową jest czasochłonne i często . 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. Dotychczasowe i nowe aplikacje będą działać z platformą autouzupełniania, gdy użytkownik wyrazi na to zgodę. autouzupełniania.
Możesz podjąć pewne działania, aby zoptymalizować sposób współdziałania aplikacji z platformą. Aby dowiedzieć się więcej, Więcej informacji znajdziesz w artykule Omówienie platformy autouzupełniania.
Czcionki do pobrania
Android 8.0 (poziom interfejsu API 26) i Android Support Library 26 umożliwiają żądanie czcionek z aplikacji dostawcy zamiast grupowania czcionek w pliku APK ani zezwalania Czcionki do pobrania w pliku 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 na temat pobierania czcionek znajdziesz tutaj: 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. Możesz potem uzyskać do nich dostęp za pomocą
pomoc nowego typu zasobów: font
.
Biblioteka pomocy 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 Więcej informacji: Czcionki w formacie XML.
Automatyzacja rozmiaru TextView
Android 8.0 (poziom interfejsu API 26) umożliwia ustawienie rozmiaru rozwijania tekstu zgodnie z rozmiarem obiektu TextView. Oznacza to, że zoptymalizowanie rozmiaru tekstu na różnych ekranach lub w przypadku zawartości dynamicznej. Aby dowiedzieć się więcej o automatycznym dobieraniu rozmiaru TextView w Androidzie 8.0, przeczytaj artykuł o automatycznym dobieraniu rozmiaru obiektu TextView.
Adaptacyjne ikony
Android 8.0 (poziom interfejsu API 26) wprowadza ikony adaptacyjnego programu uruchamiającego. Ikony adaptacyjne obsługują elementy wizualne i 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
Programiści aplikacji do tworzenia obrazów na Androida mogą teraz korzystać z nowych urządzeń na wyświetlaczu o szerokiej gamie 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 tutaj: 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:
Interfejs API Google Safe Browsing API.
Przypinanie skrótów i widżetów
Android 8.0 (poziom interfejsu API 26) wprowadza przypinanie skrótów w aplikacji oraz widżety. W aplikacji możesz utworzyć przypięte skróty i widżety dla obsługiwane programy uruchamiające (za zgodą użytkownika).
Więcej informacji: Przypinanie skrótów i widżetów przewodnik po funkcjach.
Maksymalny współczynnik proporcji ekranu
W Androidzie 8.0 (poziom interfejsu API 26) wprowadzono zmiany w konfigurowaniu maksymalnego formatu obrazu aplikacji.
Po pierwsze, Android 8.0 wprowadza maxAspectRatio, których możesz użyć, aby ustawić maksymalny format obrazu w aplikacji. Ponadto w Androidzie 8.0 i nowszych domyślny maksymalny format obrazu to natywny format obrazu urządzenia, na którym działa aplikacja.
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 wielu okien jest uruchomiona na urządzeniu z kilkoma wyświetlaczami, użytkownicy mogą przenieść aktywność 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. Zaznaczone działanie jest wznowione. wszystkie inne widoczne działania są wstrzymane, ale nie zatrzymane. Więcej informacji na temat konfiguracji w cyklu życia aktywności, gdy widocznych jest kilka Więcej informacji: Wiele okien Cykl życia.
Gdy użytkownik przenosi aktywność z jednego ekranu na drugi, zmienia rozmiar działania i w razie potrzeby wprowadza zmiany w środowisku wykonawczym. Twoja aktywność może samodzielnie wprowadzić zmiany w konfiguracji lub umożliwić systemowi zniszczyć proces zawierający Twoją aktywność i odtworzyć go z nowym wymiarów. Więcej informacji: Konfiguracja obsługi Zmiany.
ActivityOptions
udostępnia 2 nowe metody obsługi
wiele wyświetlaczy:
setLaunchDisplayId()
- Określa, na którym wyświetlaczu ma być pokazywana aktywność.
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 dopełnienie
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:
-
layout_marginVertical
, która określa .layout_marginTop
ilayout_marginBottom
-
layout_marginHorizontal
, która określa .layout_marginLeft
ilayout_marginRight
-
paddingVertical
, która określa .paddingTop
ipaddingBottom
-
paddingHorizontal
, która określa .paddingLeft
ipaddingRight
Uwaga: jeśli dostosujesz logikę aplikacji, aby
obsługują różne
języków i kultur, w tym kierunku tekstu, należy pamiętać,
nie mają wpływu na wartości
layout_marginStart
,
layout_marginEnd
paddingStart
lub
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.
Przechwytywanie wskaźnika
Niektóre aplikacje, np. gry, klienty pulpitu zdalnego czy wirtualizacji, daje większą kontrolę nad wskaźnikiem myszy. Przechwytywanie wskaźnika to nowy funkcja w Androidzie 8.0 (poziom interfejsu API 26), która zapewnia taką kontrolę dzięki dostarczaniu wszystkich zdarzeń myszy do skupionego widoku w aplikacji.
Począwszy od Androida 8.0, View
w aplikacji może o niego prosić
przechwytywanie wskaźnika i definiowanie detektora przetwarzającego przechwycone zdarzenia wskaźnika.
w tym trybie wskaźnik myszy jest ukryty. Widok może zwolnić przechwycenie wskaźnika
gdy nie potrzebuje już danych z myszy. System może również zwolnić
przechwytywanie wskaźnika, gdy obraz straci ważność, np. gdy użytkownik otworzy
innej aplikacji.
Informacje o tym, jak korzystać z tej funkcji w aplikacji, znajdziesz w Przechwytywanie wskaźnika.
Kategorie aplikacji
Android 8.0 (poziom interfejsu API 26) umożliwia każdej aplikacji zadeklarowanie pasującej kategorii
w odpowiednich przypadkach. Te kategorie służą do grupowania aplikacji o podobnych cechach
do celów ani funkcji podczas prezentacji ich użytkownikom, na przykład w kategoriach Użycie danych, Wykorzystanie baterii lub
Wykorzystanie miejsca na dane. Możesz zdefiniować kategorię aplikacji, ustawiając
Atrybut android:appCategory
w: <application>
manifestu.
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 Warte obejrzenia, zawierające programy z aplikacji na podstawie zwyczajów użytkownika związanych z wyświetlaniem. Aplikacje mogą też podglądy filmów, które są odtwarzane automatycznie, gdy użytkownik zaznaczy program. Interfejsy API dla Zapełnianie kanałów i programów stanowi część interfejsów TvProvider API, które są rozpowszechniane jako aplikacje Moduł Biblioteka pomocy w Androidzie 8.0.
AnimatorSet
Począwszy od Androida w wersji 8.0 (poziom interfejsu API 26) interfejs API AnimatorSet
obsługuje teraz przewijanie i odtwarzanie
na odwrót. 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 nawigacja
Klastry nawigacji z klawiaturą
Jeśli aktywność w aplikacji używa złożonej hierarchii widoków, np. Rysunek 2. Rozważ uporządkowanie grup elementów interfejsu w klastry, aby ułatwić sobie zadanie nawigowanie 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 pięć klastrów nawigacyjnych,
może nawigować za pomocą skrótu do klastra nawigacji. Klastry
wyświetlają się w następującej kolejności: górny panel, lewy panel boczny, zawartość główna
obszar, dolny panel i pływający przycisk polecenia.](https://developer.android.google.cn/static/images/about/versions/oreo/keyboard-navigation-clusters.png?authuser=8&hl=pl)
Aby utworzyć element View
lub ViewGroup
dla klastra, ustaw parametr
android:keyboardNavigationCluster
do
true
w pliku XML układu elementu lub przekazać true
w setKeyboardNavigationCluster()
w logice interfejsu aplikacji.
Uwaga: klastry nie mogą być zagnieżdżone, ale nie
klastry mogą występować 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ę opcję
konfiguracji w klastrze, użytkownicy nie mogą używać klawisza Tab ani klawiszy strzałek,
przejście do klastra lub wyjście z niego; muszą kliknąć nawigację po klastrze,
kombinacji klawiszy.
Wyświetl domyślny fokus
W Androidzie 8.0 (poziom interfejsu API 26) możesz przypisać View
, który powinien
uaktywnienie fokusu po wznowieniu (odtworzonej) aktywności i naciśnięciu klawisza
klawisz nawigacyjny, np. klawisz Tab. 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żyć tej funkcji
zwraca uwagę na określone słowa, gdy mechanizm zamiany tekstu na mowę mówi
.
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ąć. Po rozpoczęciu odtwarzania dźwięku z tego zakresu tekstu
onRangeStart()
. 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
Do Androida 8.0 (poziom interfejsu API 26) dodaliśmy 3 nowe detektory StrictMode, które pomagają identyfikować potencjalne błędy w aplikacji:
detectUnbufferedIo()
wykryje, kiedy aplikacja odczytuje lub zapisuje dane bez buforowania, co może mieć znaczny wpływ skuteczność reklam.detectContentUriWithoutPermission()
Wykrywaj, gdy aplikacja przypadkowo zapomni o przyznaniu uprawnień innej aplikacji podczas rozpoczynania aktywności poza aplikacją.detectUntaggedSockets()
wykryje, kiedy wykonuje ruch w sieci bez użyciasetThreadStatsTag(int)
, aby otagować ruch na potrzeby debugowania w celach informacyjnych.
Dane w pamięci podręcznej
Android 8.0 (poziom interfejsu API 26) oferuje lepsze wskazówki i sposoby działania związanych z danymi 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 zatem przechowujesz w pamięci podręcznej dane przydzielony limit, Twoje pliki z pamięci podręcznej będą wśród ostatnich plików w systemie, które zostaną usunięte niezbędną. Gdy system zdecyduje, które pliki z pamięci podręcznej usunąć w aplikacji, pod uwagę brane są najstarsze pliki (zgodnie z czasem modyfikacji).
Dostępne są też 2 nowe zachowania, które można włączyć dla poszczególnych katalogów w celu kontrolowania sposób zwalniania danych z pamięci podręcznej:
StorageManager.setCacheBehaviorAtomic()
może służyć do wskazania, że katalog i cała jego zawartość powinny zostać usunięte jako jedna jednostka atomowa.setCacheBehaviorTombstone(File, boolean)
może służyć do wskazania, że zamiast usuwać pliki znajdujące się w katalogu, należy je obciąć do 0 bajtów .
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, dodając obsługę wczytywania dużych tylko jedną stronę naraz. Na przykład aplikacja do zarządzania zdjęciami, która zawiera wiele tysięcy Obrazy mogą wysyłać zapytania o podzbiór danych do wyświetlenia na stronie. Każda strona wyników zwracanych przez dostawcę treści jest reprezentowana przez jeden kursor obiektu. Zarówno klient, jak i dostawca muszą wdrożyć stronicowanie, aby korzystać z tę funkcję.
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
, przekaż identyfikator URI danych do odświeżenia.
Uwaga: ponieważ żądanie danych może być wysyłane przez sieć,
użyj wywołania refresh()
z
po stronie klienta tylko wtedy, gdy istnieją wyraźne sygnały, że treść jest nieaktualna.
Najczęstszą przyczyną odświeżania treści jest odpowiedź na
przesuń, aby odświeżyć
Gest wyraźnie prosi o wyświetlenie aktualnej zawartości w bieżącym interfejsie.
Ulepszenia usługi 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ż zaplanowane zadania pozwalają zwykle
usług w tle ani ukrytych odbiorników.
Zmiany w JobScheduler
obejmują:
-
Możesz teraz powiązać kolejkę roboczą z zaplanowanym zadaniem. Aby dodać element roboczy do:
kolejka zadania, wywołanie
JobScheduler.enqueue()
Gdy zadanie jest uruchomione, może przetwarzać oczekujące zadania z kolejki. Ta funkcja obsługuje wiele przypadków użycia, które wcześniej wymagały w celu uruchomienia usługi w tle, a zwłaszcza usług, które implementująIntentService
-
Androida
W Bibliotece pomocy 26.0.0 wprowadziliśmy nową klasę
JobIntentService
, która udostępnia te same funkcje działa jakIntentService
, ale używa zadań zamiast usługi w Androidzie 8.0 (poziom interfejsu API 26) lub nowszym. -
Możesz teraz dzwonić
JobInfo.Builder.setClipData()
powiązanie elementuClipData
z zadaniem. Ta opcja umożliwia włączenie Powiązanie przyznanych uprawnień URI z zadaniem uprawnienia do przekazywania uprawnień doContext.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 działa, jeśli na urządzeniu jest mało miejsca.
JobInfo.isRequireBatteryNotLow()
- Zadanie nie działa, jeśli poziom baterii jest równy lub niższy od krytycznego próg; to jest poziom, przy którym urządzenie pokazuje słabą baterię ostrzeżenia.
NETWORK_TYPE_METERED
- Tak jak w przypadku większości komórkowej transmisji danych zadanie wymaga połączenia sieciowego z pomiarem użycia danych abonamentów.
Niestandardowy magazyn danych
Android 8.0 (poziom interfejsu API 26) pozwala udostępnić w preferencjach niestandardowy magazyn danych, który może przydatne, jeśli aplikacja przechowuje ustawienia w chmurze lub lokalnej bazie danych; (jeśli ustawienia są dostosowane do urządzenia). Więcej informacji na temat: wdrożenia magazynu danych, zapoznaj się z artykułem Magazyn danych niestandardowych.
Ulepszenia multimediów
Regulacja głośności
Dostępne są nowe zajęcia: VolumeShaper
. Używaj
pozwala uruchamiać krótkie, automatyczne przejścia
Patrz: Sterowanie amplitudą za pomocą narzędzia VolumeVolumer
aby dowiedzieć się więcej.
Ulepszenia ostrości dźwięku
Aplikacje audio udostępniają wyjście audio urządzenia, żądając i rezygnując z fokusu.
Aplikacja obsługuje zmiany ostrości, uruchamiając lub zatrzymując odtwarzanie albo wyciszają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 PersistableBundle
.
obiekt zawierający konfigurację
i skuteczności, wyrażone w postaci mapy atrybutów i wartości.
Metoda getMetrics()
jest zdefiniowana dla tych klas multimediów:
MediaPlayer.getMetrics()
MediaRecorder.getMetrics()
MediaCodec.getMetrics()
MediaExtractor.getMetrics()
Wskaźniki są zbierane oddzielnie dla każdej instancji i pozostają dostępne dla od początku istnienia instancji. Jeśli nie ma dostępnych danych, metoda zwraca wartość null. Rzeczywiste wskaźniki zależą od klasy.
Odtwarzacz 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 też drugi parametr, który określa tryb wyszukiwania:
SEEK_PREVIOUS_SYNC
przenosi pozycję multimediów do ramki synchronizacji (klucza) powiązane ze źródłem danych, które znajduje się w danym momencie lub wcześniej.SEEK_NEXT_SYNC
przenosi pozycję multimediów do powiązanej klatki synchronizacji (lub klucza). ze źródłem danych, które znajduje się w danym momencie lub tuż po nim.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.
Rejestrator multimediów
- MediaRecorder obsługuje teraz format MPEG2_TS, który jest przydatny w
strumieniowanie:
Kotlin
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS)
Java
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS);
zobacz
MediaRecorder.OutputFormat
MediaMuxer
może teraz obsługiwać dowolną liczbę strumieni audio i wideo. Nie masz już ograniczeń do jednej ścieżki audio i/lub jednej ścieżki wideo. Użyj formatu:addTrack()
aby miksować tyle utworów, ile chcesz.MediaMuxer
może też dodać 1 lub więcej ścieżek metadanych ze zdefiniowaną przez użytkownika ścieżką dla klatki. i informacjami o nich. Format metadanych jest określany przez aplikację. ścieżka metadanych jest obsługiwana tylko w przypadku kontenerów MP4.
Metadane przydają się podczas przetwarzania w trybie offline. Na przykład sygnały żyroskopowe z czujnik może wykorzystać 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/audio, z wyjątkiem
że dane nie pochodzą z MediaCodec
. Zamiast tego aplikacja przekazuje
ByteBuffer
z sygnaturą czasową powiązaną z
Metoda writeSampleData()
.
Sygnatura czasowa musi obejmować tę samą podstawę czasową co ścieżki wideo i audio.
Wygenerowany plik MP4 korzysta z elementu TextMetaDataSampleEntry
zdefiniowanego w sekcji
12.3.3.2 standardu ISOBMFF w celu wskazania formatu MIME metadanych. Jeśli używasz MediaExtractor
do wyodrębnienia pliku ze ścieżką metadanych, MIME
formatu metadanych zostanie wyodrębniony do MediaFormat
.
Ulepszony dostęp do plików multimedialnych
Storage Access Framework (SAF) umożliwia aplikacjom ujawnianie niestandardowych
DocumentsProvider
, która może przyznawać dostęp do plików
w źródle danych do innych aplikacji.
dostawca dokumentów może nawet przyznawać dostęp do plików
które są przechowywane w sieciowej pamięci masowej lub korzystają z 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ę wyzwania:
- Odtwarzacze multimedialne wymagają dostępu do pliku od dostawcy dokumentów z możliwością przewijania. 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 nie może odtworzyć pliku bez pliku deskryptor, więc odtwarzanie nie może rozpocząć się, dopóki dostawca dokumentów nie zakończy działania pobieranie pliku.
- Menedżerowie kolekcji multimediów, np. aplikacje do zdjęć, muszą przejrzeć dostęp do identyfikatorów URI w celu uzyskania dostępu do multimediów przechowywanych na zewnętrznej karcie SD za pomocą foldery. 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 ze względu na jego Identyfikator 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. SAF następnie dostarcza do dokumentów żądania z dyskretnymi bajtami dostawcy usług. Ta funkcja pozwala dostawcy dokumentów zwrócić dokładny zakres bajtów żądanych przez aplikację odtwarzacza, zamiast buforować całą z wyprzedzeniem.
Aby użyć tej funkcji, musisz wywołać nowy
Metoda StorageManager.openProxyFileDescriptor()
.
Metoda openProxyFileDescriptor()
akceptuje obiekt ProxyFileDescriptorCallback
jako wywołanie zwrotne. SAF wywołuje
wywołanie zwrotne za każdym razem, gdy aplikacja kliencka wykonuje operacje na plikach w
deskryptor pliku zwrócony od dostawcy dokumentów.
Bezpośredni dostęp do dokumentów
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
.
Ponieważ jednak zwrócony identyfikator URI jest obsługiwany przez
DocumentsProvider
, mają dostęp menedżerowie kolekcji multimediów
bezpośrednio w dokumencie, bez konieczności przechodzenia przez drzewa katalogów o ograniczonym zakresie.
Dzięki temu menedżerowie multimediów mogą wykonywać operacje na plikach w dokumencie.
znacznie szybciej.
Uwaga: metoda getDocumentUri()
wyszukuje tylko pliki multimedialne. nie zezwala na aplikacje
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 korzystasz z platformy Storage Access Framework w Androidzie 8.0 (poziom interfejsu API 26), możesz użyć funkcji
Metoda findDocumentPath()
, dostępna w obu
DocumentsContract
i
DocumentsProvider
klasy, aby określić ścieżkę z katalogu głównego systemu plików dla danego
ID. Metoda zwraca tę ścieżkę w
DocumentsContract.Path
obiekt. 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 załadować plik podrzędny dokumentów znajdujących się w określonym folderze, jeśli użytkownik wybierze tę opcję folderu Dysku.
Uwaga: jeśli aplikacja ma uprawnienia dostępu tylko do niektórych dokumentów.
na ścieżce zwracana wartość 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 registerAudioPlaybackCallback()
, przekazując w wystąpieniu
AudioManager.AudioPlaybackCallback
Klasa AudioManager.AudioPlaybackCallback
zawiera parametr
onPlaybackConfigChanged()
, którą system wywołuje, gdy dźwięk
zmian konfiguracji odtwarzania.
Łączność
Rozpoznawalność Wi-Fi
Android 8.0 (poziom interfejsu API 26) dodaje obsługę Wi-Fi Aware Specyfikacja sieci wiedzy (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 API 26) udostępnia interfejsy API, które umożliwiają dostosowanie okno żądania parowania podczas parowania z urządzeniami towarzyszącymi Bluetooth, BLE i Wi-Fi. Więcej informacji: Urządzenie towarzyszące Parowanie.
Więcej informacji o korzystaniu z Bluetootha w Androidzie znajdziesz w Przewodnik po Bluetooth. Dla: zmian w Bluetooth, które są typowe w Androidzie 8.0 (poziom interfejsu API 26), zapoznaj się z sekcją Sekcja Bluetooth na Zmiany w działaniu w Androidzie 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 uczy się tych wszystkich informacji automatycznie według użytkowników swoje ustawienia.
Inteligentne udostępnianie działa w przypadku rodzajów treści innych niż image
, na przykład:
audio
, video
, text
, URL
ip.
Aby włączyć inteligentne udostępnianie, dodaj element ArrayList
– maksymalnie 3
z adnotacjami w formie ciągu znaków do intencji, która udostępnia treść. Adnotacje powinny
opisać główne elementy lub tematy poruszane w treściach. Ten 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 otrzymuje sugerowany wybór
i innych rozwiązań. 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 API 26) obsługuje kilka nowych funkcji ułatwień dostępu na deweloperów, którzy tworzą własne usługi ułatwień dostępu:
- Nowa kategoria liczby konwersji do dostosowania ułatwienia dostępu głośność.
- Odcisk palca gestami.
- Obsługa wielu języków zamiany tekstu na mowę.
- Środowisko sprzętowe ułatwienia dostępu skrót umożliwiający szybki dostęp do preferowanej usługi ułatwień dostępu.
- Pomoc: ciąg dalszy gestów czy automatycznych sekwencji pociągnięć.
- An ułatwienia dostępu przycisk do wywoływania jednej z kilku włączonych funkcji ułatwień dostępu (dostępne tylko na urządzeniach korzystających z wyrenderowanego programowo obszaru nawigacji).
- Ustandaryzowane jednostronne wartości zakresów.
- Kilka funkcji dla przetwarzanie , w tym tekst podpowiedzi i umiejscowienie tekstu na ekranie. znaków.
Prywatność i bezpieczeństwo
Uprawnienia
Android 8.0 (poziom interfejsu API 26) wprowadza kilka nowych uprawnień związanych z telefonami:
-
Uprawnienie
ANSWER_PHONE_CALLS
umożliwia aplikacji odbieranie odpowiedzi przychodzące połączenia telefoniczne. Obsługa przychodzącego połączenia telefonicznego w: aplikacji, możesz użyćacceptRingingCall()
. -
Uprawnienie
READ_PHONE_NUMBERS
przyznaje aplikacji uprawnienia do odczytu z numerów telefonów zapisanych na urządzeniu.
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. W Androidzie 8.0
addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
która umożliwia aplikacjom określenie listy rodzajów kont
dla których konta mają zostać przesłane zmiany.
Zmiany w interfejsie API
AccountManager udostępnia 6 nowych metod, które pomagają podmiotom uwierzytelniającym zarządzać aplikacje mają dostęp do konta:
setAccountVisibility(android.accounts.Account, java.lang.String, int)
: Ustawia poziom widoczności określonego konta użytkownika i pakietu .-
getAccountVisibility(android.accounts.Account, java.lang.String)
: Pobiera poziom widoczności określonego konta użytkownika i pakietu . -
getAccountsAndVisibilityForPackage(java.lang.String, java.lang.String)
: Umożliwia uwierzytelniającym uzyskanie informacji o kontach i poziomach widoczności dla danej przesyłki. -
getPackagesAndVisibilityForAccount(android.accounts.Account)
: Umożliwia uwierzytelnianiem pobieranie zapisanych wartości widoczności dla danego konta. -
addAccountExplicitly(android.accounts.Account, java.lang.String, android.os.Bundle, java.util.Map<java.lang.String, java.lang.Integer>)
: Umożliwia uwierzytelnianiem inicjowanie wartości widoczności konta. -
addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
: Dodaje detektorOnAccountsUpdateListener
doAccountManager
obiekt. System wywołuje ten detektor za każdym razem, gdy zmieni się lista kont na urządzeniu.
Android 8.0 (poziom interfejsu API 26) wprowadza dwie specjalne wartości nazwy pakietu, które określają widoczność
poziomów dla aplikacji, które nie zostały ustawione za pomocą
setAccountVisibility(android.accounts.Account, java.lang.String, int)
.
PACKAGE_NAME_KEY_LEGACY_VISIBLE
jest stosowana do aplikacji, w których
GET_ACCOUNTS
uprawnienia i docelowe wersje
Android w wersji starszej niż Android 8.0 lub której
podpisy są zgodne z danymi uwierzytelniającymi kierowanymi na dowolną wersję Androida.
PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE
określa domyślną wartość widoczności dla
aplikacje, które nie zostały wcześniej ustawione i w przypadku których
PACKAGE_NAME_KEY_LEGACY_VISIBLE
to nie
mają zastosowanie.
Więcej informacji o nowych interfejsach API dostępu do konta i odkrywania znajdziesz w
odniesienie do
AccountManager
i
OnAccountsUpdateListener
Testowanie
Testowanie narzędzi
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ć, dla którego testowania instrumentacji mają być uruchamiane poza domyślnym procesem aplikacji. Ta konfiguracja jest przydatna, jeśli aplikacja zawiera wiele działań działających w różnych procesach,
Aby zdefiniować instrumentację procesu inną niż domyślna, przejdź do pliku manifestu
i wybierz odpowiednie
<instrumentation>
. Dodaj parametr
android:targetProcess
i ustaw jego wartość na jedną z
następujące:
- Nazwa konkretnego procesu.
- Rozdzielona przecinkami lista nazw procesów.
- Symbol wieloznaczny (
"*"
), który umożliwia uruchamianie instrumentacji w porównaniu z uruchomionym procesem, który wykonuje kod w pakiecie określonym w atrybutandroid:targetPackage
.
Podczas wykonywania testu instrumentacji możesz sprawdzić, który proces
jest on testowany, wywołując metodę getProcessName()
.
Raportowanie wyników podczas testu
Możesz teraz raportować wyniki podczas wykonywania testu instrumentacji,
zamiast później, wywołując addResults()
.
Pozorowane intencje podczas testów
Aby ułatwić 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 stub.
Instrumentation.ActivityResult
obiekt zamiast wykonywania
od intencji. Wykorzystując tę pozorną logikę intencji, możesz skupić się
na temat tego, jak aktywność przygotowuje i obsługuje intencje przekazywane
do innej aktywności lub do zupełnie innej aplikacji.
Środowisko wykonawcze Narzędzia
Optymalizacja platformy
Android 8.0 (poziom interfejsu API 26) wprowadza do platformy środowisko wykonawcze i inne optymalizacje, co prowadzi do poprawy wydajności. Optymalizacje te obejmują usuwanie czyszczenia pamięci równocześnie, efektywniejsze wykorzystanie pamięci i lokalizacji kodu.
Te optymalizacje przyspieszają rozruch oraz zapewniają lepszą wydajność System operacyjny i aplikacje.
Zaktualizowano obsługę języka Java
W Androidzie 8.0 (poziom API 26) dodaliśmy obsługę kilku dodatkowych interfejsów API OpenJDK w języku Java:
java.time
z OpenJDK 8.java.nio.file
ijava.lang.invoke
z OpenJDK 7.
Aby dowiedzieć się więcej o klasach i metodach w tych nowo dodanych funkcjach można znaleźć w dokumentacji API.
Jeśli chcesz korzysta z funkcji języka Java 8 w Android Studio, pobierz najnowszą wersję przedpremierową.
Zaktualizowano interfejsy API ICU4J Android Framework
Android 8.0 (poziom interfejsu API 26) rozszerza
Platforma ICC na Androida
interfejsów API – stanowiących podzbiór interfejsów API ICU4J – umożliwiających deweloperom aplikacji
użyj w ramach pakietu android.icu
. Te interfejsy API używają danych lokalizacji
dostępnych na urządzeniu. Można więc zmniejszyć ilość miejsca zajmowanego przez plik APK, nie kompilując
Biblioteki ICU4J w pliku APK.
Tabela 1. Używane wersje ICU, CLDR i Unicode na Androidzie.
Poziom Android API | Wersja OIOM-a | Wersja CLDR | Wersja Unicode |
---|---|---|---|
Android 7.0 (poziom interfejsu 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 interfejsy API i funkcje dla firm na urządzeniach z Android 8.0 (poziom API 26). Najważniejsze zmiany:
- Profile służbowe na w pełni zarządzanych urządzeniach pozwalają firmom oddzielić pracę od danych osobowych, zarządzając jednocześnie oboma tymi elementami.
- Przekazywanie dostępu do interfejsu API umożliwia właścicielom urządzeń i profili przypisywanie aplikacji do zarządzania innymi aplikacjami.
- 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 w sieci pomaga firmom śledzić problemy.
Aby dowiedzieć się więcej o tych i innych nowych interfejsach API i funkcjach Androida dla firm, zobacz artykuł na temat Androida w firmach.