Android 10 wprowadza świetne funkcje i możliwości dla użytkowników i programistów. Ten dokument zawiera informacje o tym, co jest dostępne dla deweloperów.
Aby dowiedzieć się więcej o interfejsach API, przeczytaj raport porównawczy interfejsów API lub zajrzyj do dokumentacji interfejsu API Androida – poszukaj interfejsów API, które zostały „dodane w poziomie interfejsu API 29”. Sprawdź też zmiany zachowania Androida 10 (dotyczące aplikacji kierowanych na poziom interfejsu API 29 i wszystkich aplikacji) oraz zmiany dotyczące prywatności, aby dowiedzieć się, w jakich obszarach zmiany platformy mogą mieć wpływ na Twoje aplikacje.
Ulepszenia zabezpieczeń
Android 10 wprowadza wiele funkcji bezpieczeństwa, które są opisane w następnych sekcjach.
Ulepszone okna uwierzytelniania biometrycznego
Android 10 wprowadza te ulepszenia obsługi uwierzytelniania biometrycznego:
- Sprawdzenie możliwości uwierzytelniania biometrycznego.
- mechanizm zapasowy, który umożliwia użytkownikowi uwierzytelnienie za pomocą kodu PIN, wzoru lub hasła, jeśli nie może uwierzytelnić się za pomocą danych biometrycznych.
- Wskazówka, która informuje system, że nie należy wymagać potwierdzenia od użytkownika po uwierzytelnieniu za pomocą niejawnego sposobu biometrycznego. Możesz na przykład powiedzieć systemowi, że po uwierzytelnieniu użytkownika za pomocą uwierzytelniania twarzą nie trzeba wymagać dalszego potwierdzenia.
Uruchamianie umieszczonego kodu DEX bezpośrednio z pliku APK
Od Androida 10 możesz zlecić platformie uruchamianie osadzonego kodu DEX bezpośrednio z pliku APK aplikacji. Ta opcja może pomóc w zapobieganiu atakom, jeśli atakującemu uda się zmienić lokalnie skompilowany kod na urządzeniu.
Więcej informacji znajdziesz w artykule Uruchamianie umieszczonego kodu DEX bezpośrednio z pliku APK.
Obsługa TLS 1.3
W Androidzie 10 dodano obsługę TLS 1.3. TLS 1.3 to duża wersja standardu TLS, która zapewnia lepszą wydajność i lepsze zabezpieczenia. Nasze testy porównawcze wskazują, że bezpieczne połączenia można nawiązywać nawet o 40% szybciej za pomocą protokołu TLS 1.3 w porównaniu z protokołem TLS 1.2.
Więcej informacji o implementacji TLS 1.3 znajdziesz w sekcji poświęconej TLS na stronie ze zmianami zachowania we wszystkich aplikacjach.
Interfejs Public Conscrypt API
Od Androida 10 dostawca zabezpieczeń Conscrypt udostępnia publiczny interfejs API do obsługi TLS.
Kolekcja klas w android.net.ssl
zawiera statyczne metody, które umożliwiają dostęp do funkcji niedostępnych w ogólnych interfejsach API javax.net.ssl
. Nazwy tych klas można odgadnąć na podstawie liczby mnogiej klasy javax.net.ssl
. Na przykład kod, który działa na instancjach klasy javax.net.ssl.SSLSocket
, może zamiast tego używać metod z klasy SSLSockets
.
Funkcje łączności
Android 10 zawiera kilka ulepszeń związanych z obsługą sieci i łącznością.
Interfejs API połączenia z siecią Wi-Fi
Android 10 obsługuje połączenia peer-to-peer. Dzięki tej funkcji aplikacja może poprosić użytkownika o zmianę punktu dostępu, z którym urządzenie jest połączone. Służy do opisania właściwości żądanej sieci za pomocą polecenia WifiNetworkSpecifier
. Połączenie typu peer-to-peer jest używane do celów innych niż dostarczanie sieci, takich jak konfiguracja inicjowania dla urządzeń dodatkowych, takich jak Chromecast czy sprzęt Google Home.
Więcej informacji znajdziesz w artykule Wi-Fi Network Request API do obsługi połączeń typu peer-to-peer.
Interfejs API sugestii dotyczących sieci Wi-Fi
Android 10 obsługuje wyświetlanie użytkownikowi prośby o połączenie z punktem dostępu Wi-Fi. Możesz podać sugestie, z którą siecią chcesz się połączyć. Platforma wybierze, które punkty dostępu zaakceptować, na podstawie danych z Twojej aplikacji i innych aplikacji.
Więcej informacji o tej funkcji znajdziesz w sekcji Sugestie Wi-Fi.
Ulepszenia w trybach Wi-Fi o wysokiej wydajności i małym opóźnieniu
Android 10 umożliwia podanie wskazówki dotyczącej modemu, aby zminimalizować opóźnienia.
Android 10 rozszerza interfejs API blokady Wi-Fi, aby skutecznie obsługiwać tryb o wysokiej wydajności i tryb o niskiej latencji. Tryb oszczędzania energii Wi-Fi jest wyłączony w trybie wysokiej wydajności i niskiego opóźnienia, a w trybie niskiego opóźnienia może być włączona dalsza optymalizacja opóźnienia, w zależności od obsługi modemu.
Tryb niskiej latencji jest włączony tylko wtedy, gdy aplikacja, która uzyskała blokadę, działa na pierwszym planie, a ekran jest włączony. Tryb niskiego opóźnienia jest szczególnie przydatny w przypadku gier mobilnych w czasie rzeczywistym.
Specjalistyczne wyszukiwania w rozwiązaniu DNS
Android 10 wprowadza natywną obsługę specjalistycznych wyszukiwań DNS z użyciem zarówno tekstu jawnego, jak i trybu DNS-over-TLS. Wcześniej platforma DNS resolver obsługiwała tylko rekordy A i AAAA, które umożliwiają wyszukiwanie tylko adresów IP powiązanych z nazwą, ale nie obsługiwała żadnych innych typów rekordów.
Interfejs API DnsResolver
udostępnia ogólne, asynchroniczne rozwiązanie, które umożliwia wyszukiwanie SRV
, NAPTR
i innych typów rekordów. Pamiętaj, że analizowanie odpowiedzi należy do aplikacji.
Informacje o aplikacjach opartych na NDK znajdziesz w artykule android_res_nsend
.
Wi-Fi Easy Connect
Android 10 umożliwia korzystanie z Easy Connect do udostępniania danych logowania do Wi-Fi urządzeniu partnerowi jako zamiennik przestarzałego WPS.
Aplikacje mogą zintegrować Easy Connect z procesem konfiguracji i zarządzania, używając inencji ACTION_PROCESS_WIFI_EASY_CONNECT_URI
.
Więcej informacji o tej funkcji znajdziesz w artykule Łatwe łączenie z siecią Wi-Fi.
Interfejs API połączenia Wi-Fi Direct
W Androidzie 10 klasy interfejsu API WifiP2pConfig
i WifiP2pManager
zostały zaktualizowane, aby obsługiwać szybkie nawiązywanie połączeń z Wi-Fi Direct za pomocą informacji zdefiniowanych wstępnie. Te informacje są udostępniane przez kanał poboczny, taki jak Bluetooth lub NFC.
Poniższy przykładowy kod pokazuje, jak utworzyć grupę za pomocą zdefiniowanych wstępnie informacji:
Kotlin
val manager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager val channel = manager.initialize(this, mainLooper, null) // prefer 5G band for this group val config = WifiP2pConfig.Builder() .setNetworkName("networkName") .setPassphrase("passphrase") .enablePersistentMode(false) .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ) .build() // create a non-persistent group on 5GHz manager.createGroup(channel, config, null)
Java
WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); Channel channel = manager.initialize(this, getMainLooper(), null); // prefer 5G band for this group WifiP2pConfig config = new WifiP2pConfig.Builder() .setNetworkName("networkName") .setPassphrase("passphrase") .enablePersistentMode(false) .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ) .build(); // create a non-persistent group on 5GHz manager.createGroup(channel, config, null);
Aby dołączyć do grupy za pomocą danych logowania, zastąp manager.createGroup()
następującymi wartościami:
Kotlin
manager.connect(channel, config, null)
Java
manager.connect(channel, config, null);
Kanały Bluetooth LE Connection Oriented Connections (CoC)
Android 10 umożliwia aplikacji korzystanie z połączeń BLE CoC do przesyłania większych strumieni danych między dwoma urządzeniami BLE. Ten interfejs abstrakcyjnie obsługuje Bluetooth i mechanizmy łączności, aby uprościć implementację.
Funkcje związane z telefonią
Android 10 zawiera kilka ulepszeń związanych z telefonami.
Ulepszenia jakości połączeń
Android 10 umożliwia gromadzenie informacji o jakości trwających połączeń w podsystemie multimedialnym IP (IMS), w tym o jakości połączeń z sieci i z sieci, na urządzeniach obsługujących tę funkcję.
Filtrowanie połączeń i identyfikator dzwoniącego
Android 10 udostępnia Twojej aplikacji możliwość rozpoznawania połączeń, które nie są zapisane w książce adresowej użytkownika, jako potencjalnych połączeń spamowych i cichego odrzucania ich w imieniu użytkownika. Informacje o tych zablokowanych połączeniach są rejestrowane w rejestrze połączeń jako zablokowane połączenia, aby zapewnić użytkownikowi większą przejrzystość w przypadku braku połączeń. Korzystanie z tego interfejsu API eliminuje konieczność uzyskania od użytkownika uprawnień READ_CALL_LOG
, aby udostępnić funkcję sprawdzania połączeń i identyfikacji dzwoniącego.
Interfejs API usługi przekierowywania połączeń
Android 10 zmienia sposób obsługi intencji połączeń. Transmisja NEW_OUTGOING_CALL
została wycofana i zastąpiona interfejsem API CallRedirectionService
. Interfejs API CallRedirectionService
udostępnia interfejsy, które umożliwiają modyfikowanie wychodzących połączeń wykonywanych przez platformę Android. Aplikacje innych firm mogą na przykład anulować połączenia i przekierować je przez VoIP.
Ulepszenia dotyczące tworzenia plików w pamięci zewnętrznej
Oprócz wprowadzenia ograniczonego miejsca na dane Android 10 oferuje też te funkcje związane z zewnętrznym miejscem na dane:
- Możesz użyć flagi
IS_PENDING
, aby przyznać aplikacji wyłączny dostęp do pliku multimedialnego zapisywanego na dysku. - Jeśli wiesz, gdzie powinny być przechowywane pliki, możesz podać systemowi podpowiedź dotyczącą tego, gdzie powinny być przechowywane nowo zapisane pliki.
- Każde urządzenie zewnętrznej pamięci masowej ma niepowtarzalną nazwę woluminu.
Multimedia i grafika
Android 10 wprowadza te nowe funkcje i interfejsy API dotyczące multimediów i grafiki:
Udostępnianie wejścia audio
Android 10 umożliwia jednoczesne korzystanie z wejścia audio przez 2 aplikacje. Więcej informacji znajdziesz w artykule Udostępnianie wejścia audio.
Przechwytywanie odtwarzania dźwięku
Android 10 umożliwia aplikacji rejestrowanie odtwarzania dźwięku z innych aplikacji. Pełne informacje znajdziesz w artykule Nagrywanie odtwarzania.
Pasek w powiadomieniach w stylu MediaStyle
Począwszy od Androida 10, MediaStyle
powiadomienia wyświetlają pasek przewijania. Suwak odtwarzania pokazuje postęp odtwarzania od PlaybackState.getPosition()
. W niektórych przypadkach można użyć suwaka, aby przejść do określonego miejsca w odtwarzanym programie. Wygląd i działanie suwaka jest kontrolowany przez te reguły:
- Pasek przewijania pojawia się, jeśli jest aktywny element
MediaSession
, a jego czas trwania (określony przezMediaMetadata.METADATA_KEY_DURATION
) jest większy od zera. Oznacza to, że pasek nie pojawia się w przypadku strumieni nieokreślonych, takich jak transmisje na żywo i audycje radiowe. - Jeśli sesja implementuje
ACTION_SEEK_TO
, użytkownik może przeciągać suwak, aby kontrolować miejsce odtwarzania.
Natywne API MIDI
Interfejs API do obsługi MIDI natywnych na Androida (AMidi) umożliwia deweloperom aplikacji wysyłanie i odbieranie danych MIDI za pomocą kodu C/C++, co pozwala na ściślejszą integrację z logiką sterowania i odtwarzania dźwięku w języku C/C++ oraz minimalizuje potrzebę korzystania z JNI.
Więcej informacji znajdziesz w artykule Android Native MIDI API.
Ulepszenia MediaCodecInfo
Android 10 dodaje metody do MediaCodecInfo
, które ujawniają więcej informacji o kodeku.
Więcej informacji znajdziesz w artykule Kodeki multimedialne.
Thermal API
Gdy urządzenia się nagrzeją, mogą spowalniać procesor lub GPU, co może w nieoczekiwany sposób wpływać na aplikacje i gry. W przypadku aplikacji używających złożonej grafiki, intensywnie wykorzystywanych obliczeń lub długotrwałej aktywności sieciowej występuje większe prawdopodobieństwo wystąpienia problemów. Mogą się one różnić w zależności od urządzenia, w zależności od częstotliwości na poziomie chipsetu i rdzeni, poziomu integracji, a także opakowania i formatu urządzenia.
W Androidzie 10 aplikacje i gry mogą korzystać z interfejsu Thermal API, aby monitorować zmiany na urządzeniu i podejmować działania w celu zmniejszenia zużycia energii i przywrócenia normalnej temperatury. Aplikacje rejestrują listenera w PowerManagerze, który przekazuje systemowi bieżący stan termiczny urządzenia: od lekkiego i umiarkowanego do poważnego, krytycznego, awaryjnego i wymagającego wyłączenia.
Gdy urządzenie raportuje stres termiczny, aplikacje i gry mogą pomóc przez przerwanie trwającej aktywności, aby na różne sposoby zmniejszyć zużycie energii. Na przykład aplikacje do strumieniowego przesyłania danych mogą zmniejszyć rozdzielczość/szybkość transmisji bitów lub ruch sieciowy, aplikacja do obsługi aparatu może wyłączyć flash lub intensywne ulepszanie obrazu, gra może zmniejszyć częstotliwość klatek lub tesselację wielokątów, aplikacja do obsługi multimediów może zmniejszyć głośność głośnika, a aplikacja do obsługi map może wyłączyć GPS.
The Heat API wymaga nowej warstwy HAL urządzenia – jest ona obecnie obsługiwana na urządzeniach Pixel z Androidem 10. Współpracujemy z producentami urządzeń, aby jak najszybciej wprowadzić szerokie wsparcie do tego ekosystemu.
Aparat i obrazy
Android 10 wprowadza te nowe funkcje związane z aparatem i obrazem:
Obsługa kamery monochromatycznej
W Androidzie 9 (poziom interfejsu API 28) po raz pierwszy wprowadzono obsługę monochromatycznego aparatu. Android 10 wprowadza kilka ulepszeń obsługi monochromatycznych aparatów:
- Obsługa formatu strumienia Y8 w celu zwiększenia efektywności wykorzystania pamięci.
- Obsługa monochromatycznego rejestrowania w formacie DNG.
- Wprowadzenie enumeracji MONO i NIR CFA w celu rozróżnienia zwykłych kamer monochromatycznych i kamer na podczerwień.
Ta funkcja umożliwia przechwytywanie natywnego obrazu monochromatycznego. Urządzenie z wieloma aparatami może używać aparatu monochromatycznego jako fizycznego aparatu pomocniczego, aby uzyskać lepszą jakość obrazu przy słabym oświetleniu.
Format dynamicznej głębi ostrości
Od Androida 10 kamery mogą przechowywać dane głębi obrazu w osobnym pliku za pomocą nowego schematu Dynamic Depth Format (DDF). Aplikacje mogą żądać zarówno obrazu JPG, jak i jego metadanych głębi, aby stosować rozmazywanie w ramach przetwarzania końcowego bez modyfikowania oryginalnych danych obrazu.
Specyfikację tego formatu znajdziesz w sekcji Format dynamicznej głębi.
Format pliku obrazu o wysokiej wydajności
Format HEIF to standardowy format plików graficznych i wideo, który zapewnia wyższą jakość kodowania i mniejszy rozmiar pliku w porównaniu z innymi formatami plików.
Więcej informacji o formacie pliku znajdziesz w artykule HEIC.
Ulepszenia dotyczące wielu kamer
Android 10 ułatwia połączenie kilku aparatów w jedną logiczną kamerę – ta funkcja została wprowadzona w Androidzie 9 (poziom interfejsu API 28). Do interfejsu Camera2 API dodano następujące elementy:
isSessionConfigurationSupported(SessionConfiguration sessionConfig)
—pozwala na zapytanie, czy przekazana konfiguracja sesji może być użyta do utworzenia sesji przechwytywania kamerą.LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
– umożliwia określenie identyfikatora aktywnej kamery fizycznej obsługującej urządzenie z kamerą logiczną. Możesz użyć zwróconych identyfikatorów, aby żądać strumieni logicznych i strumieni z fizycznych kamer podrzędnych, co pozwoli Ci zwiększyć efektywność energetyczną.
Interfejs API usług ułatwień dostępu
Android 10 wprowadza te nowe funkcje i interfejsy API usług ułatwień dostępu:
Flaga klucza dostępu AccessibilityNodeInfo
Od Androida 10 można wywołać metodę isTextEntryKey()
, by określić, czy AccessibilityNodeInfo
reprezentuje klawisz do wprowadzania tekstu, który jest częścią klawiatury lub klawiatury.
Komunikaty głosowe w oknie ułatwień dostępu
W przypadku, gdy użytkownicy muszą użyć skrótu ułatwień dostępu, aby uruchomić usługę ułatwień dostępu, Android 10 umożliwia wyświetlenie promptu odczytywania tekstu na głos, jeśli usługa tego zażąda.
Skrót ułatwień dostępu przy włączonej nawigacji za pomocą gestów
Gdy funkcja nawigacji za pomocą gestów jest włączona w Androidzie 10, przycisk ułatwień nie jest widoczny ani nie można go wybrać. Aby otworzyć menu usług ułatwień dostępu, użytkownicy muszą wykonać jeden z tych gestów:
- Przesuń 2 palcami w górę.
- Przesuń 2 palcami w górę i przytrzymaj.
Skrót ułatwień dostępu dla klawiatur fizycznych
W Androidzie 10 użytkownicy mogą aktywować skrót ułatwień dostępu na fizycznej klawiaturze, naciskając Control + Alt + Z.
Ulepszenie sterowania klawiaturą ekranową
W Androidzie 10 usługi ułatwień dostępu mogą poprosić o wyświetlenie wirtualnej klawiatury nawet wtedy, gdy urządzenie wykryje podłączoną klawiaturę fizyczną. Użytkownicy mogą zmienić to zachowanie.
Zdefiniowane przez użytkownika limity czasu ułatwień dostępu
W Androidzie 10 wprowadzono interfejs API getRecommendedTimeoutMillis()
. Ta metoda obsługuje zdefiniowane przez użytkownika limity czasu w przypadku interaktywnych i nieinteraktywnych elementów interfejsu. Na wartość zwracaną wpływają zarówno preferencje użytkownika, jak i interfejsy API usług ułatwień dostępu.
Ulepszenia autouzupełniania
Android 10 zawiera te ulepszenia usługi autouzupełniania:
Żądania dotyczące autouzupełniania związane z zgodnością
Możesz użyć flagi FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST
, aby określić, czy prośba o autouzupełnianie została wygenerowana w trybie zgodności.
Zapisywanie nazwy użytkownika i hasła jednocześnie
W przypadku przypadków, w których aplikacja używa wielu aktywności do wyświetlania nazwy użytkownika, hasła i innych pól, możesz użyć flagi SaveInfo.FLAG_DELAY_SAVE
.
Interakcja użytkownika z interfejsem zapisu
Pole hasła w oknie zapisywania możesz wyświetlać i ukrywać, ustawiając w tym oknie listenera akcji i zmieniając widoczność odpowiedniego widoku zdalnego hasła.
Obsługa aktualizowania zbiorów danych
Autouzupełnianie może aktualizować istniejące hasła. Jeśli na przykład użytkownik ma już zapisane hasło i zapisuje nowe, Autouzupełnianie zamiast zapisać nowe hasło, poprosi o zaktualizowanie dotychczasowego.
Ulepszenia klasyfikacji pól
Android 10 zawiera te ulepszenia interfejsu Field Classification API:
Konstruktor UserData.Builder
Konstruktor UserData.Builder
został zmieniony, aby lepiej dopasować go do wzorca Builder
.
Zezwalanie na mapowanie wartości na różne typy identyfikatorów kategorii
Korzystając z funkcji UserData.Builder
w Androidzie 10, możesz teraz mapować wartości na różne typy identyfikatorów kategorii. W poprzednich wersjach wyjątek był zgłaszany, jeśli wartość została dodana więcej niż raz.
Ulepszona obsługa numerów kart kredytowych
Klasyfikacja pól może teraz wykrywać 4-cyfrowe liczby jako ostatnie 4 cyfry numeru karty kredytowej.
Obsługa klasyfikacji pól w przypadku poszczególnych aplikacji
Android 10 wprowadza FillResponse.setUserData()
, który umożliwia ustawianie danych użytkownika dotyczących konkretnej aplikacji na czas trwania sesji.
Ułatwia to usłudze autouzupełniania typy pól z zawartością specyficzną dla aplikacji.
Elementy sterujące interfejsu i systemu
Android 10 wprowadza te ulepszenia interfejsu:
Obsługa limitów PopFrame JVMTI
Android 10 obsługuje interfejs can_pop_frames
w ramach implementacji JVMTI na Androidzie. Podczas debugowania ta funkcja umożliwia ponowne uruchamianie funkcji po wstrzymaniu w miejscu punktu przerwania i zmian lokalnych, globalnych lub implementacji funkcji. Więcej informacji znajdziesz na stronie z informacjami o ramce Pop Frame firmy Oracle.
Interfejs API kontroli wyświetlania
Android 10 udostępnia interfejs API SurfaceControl
zapewniający niski poziom dostępu do kompozytora systemowego (SurfaceFlinger
). W przypadku większości użytkowników SurfaceView jest odpowiednim sposobem na wykorzystanie kompozytora. Interfejs API SurfaceControl
może być przydatny w pewnych przypadkach, na przykład:
- Synchronizacja wielu powierzchni
- Wstawianie powierzchni w wielu procesach
- Zarządzanie czasem trwania na niższym poziomie
Interfejs API SurfaceControl
jest dostępny w pakiecie SDK i w połączeniach NDK.
Wdrożenie NDK obejmuje interfejs API do ręcznej wymiany buforów z kompozytorem. Jest to alternatywa dla użytkowników, którzy napotkali ograniczenia w BufferQueue
.
Wykrywanie zawieszenia renderowania WebView
Android 10 wprowadza klasę abstrakcyjną WebViewRenderProcessClient
, której aplikacje mogą używać do wykrywania, czy WebView
przestał odpowiadać. Aby korzystać z tych zajęć:
- Zdefiniuj własną podklasę i zaimplementuj jej metody
onRenderProcessResponsive()
ionRenderProcessUnresponsive()
. - Dołącz instancję
WebViewRenderProcessClient
do co najmniej 1 obiektuWebView
. - Jeśli usługa
WebView
przestanie odpowiadać, system wywoła metodęonRenderProcessUnresponsive()
klienta, przekazując argumentyWebView
iWebViewRenderProcess
. (jeśliWebView
jest procesem jednowątkowym, parametrWebViewRenderProcess
ma wartość null). Aplikacja może podjąć odpowiednie działanie, np. wyświetlić użytkownikowi okno z zapytaniem, czy chce przerwać proces renderowania.
Jeśli WebView
nie odpowiada, system okresowo wywołuje metodę onRenderProcessUnresponsive()
(nie częściej niż co 5 sekund), ale nie wykonuje żadnych innych działań.
Jeśli WebView
znów zacznie odpowiadać, system wywoła onRenderProcessResponsive()
tylko raz.
Panele ustawień
Android 10 wprowadza panele ustawień, interfejs API, który umożliwia aplikacjom wyświetlanie ustawień użytkownikom w kontekście ich aplikacji. Dzięki temu użytkownicy nie muszą wchodzić w ustawienia Ustawienia, aby zmienić takie rzeczy jak NFC czy dane mobilne, aby korzystać z aplikacji.
Załóżmy na przykład, że użytkownik otwiera przeglądarkę, gdy jego urządzenie jest w trybie samolotu. Przed Androidem 10 aplikacja mogła wyświetlać tylko ogólny komunikat z prośbą o otwarcie Ustawienia w celu przywrócenia połączenia. W Androidzie 10 aplikacja przeglądarki może wyświetlać panel z podstawowymi ustawieniami łączności, takimi jak tryb samolotowy, Wi-Fi (w tym sieci w pobliżu) i dane mobilne. Dzięki temu użytkownicy mogą przywrócić połączenie bez wychodzenia z aplikacji.
Aby wyświetlić panel ustawień, wywołaj intencję za pomocą jednej z tych czynności:
Settings.Panel
Kotlin
val panelIntent = Intent(Settings.Panel.settings_panel_type) startActivityForResult(panelIntent)
Java
Intent panelIntent = new Intent(Settings.Panel.settings_panel_type); startActivityForResult(panelIntent);
settings_panel_type
może być:
ACTION_INTERNET_CONNECTIVITY
- Pokazuje ustawienia związane z połączeniem z internetem, takie jak tryb samolotowy, Wi-Fi i mobilna transmisja danych.
ACTION_WIFI
- Pokazuje ustawienia Wi-Fi, ale nie inne ustawienia łączności. Jest to przydatne w przypadku aplikacji, które potrzebują połączenia Wi-Fi do przesyłania lub pobierania dużych plików.
ACTION_NFC
- Wyświetla wszystkie ustawienia związane z komunikacją Near Field Communication(NFC) .
ACTION_VOLUME
- Pokazuje ustawienia głośności wszystkich strumieni audio.
Ulepszenia udostępniania
Android 10 wprowadza kilka ulepszeń udostępniania:
Interfejs API Sharing Shortcuts
Interfejs API Sharing Shortcuts zastępuje interfejsy Direct Share API.
Zamiast reaktywnego pobierania wyników na żądanie, interfejs Share Shortcuts API umożliwia aplikacjom z wyprzedzeniem publikowanie bezpośrednich wartości docelowych. W ten sposób działa ShortcutManager
.
Ponieważ oba interfejsy API są podobne, rozszerzyliśmy interfejs ShortcutInfo
API, aby ułatwić korzystanie z obu funkcji. Za pomocą interfejsu Sharing Shortcuts API możesz bezpośrednio przypisywać kategorie lub osoby do docelowego odbiorcy udostępnienia. Cele udostępniania pozostaną w systemie, dopóki ta sama aplikacja ich nie zaktualizuje lub nie zostanie odinstalowana.
Starszy mechanizm bezpośredniego udostępniania nadal działa, ale aplikacje, które go używają, mają niższą priorytet niż aplikacje korzystające z interfejsu Sharing Shortcuts API.
ShortcutInfo.Builder
dodaje i ulepsza metody, aby dostarczyć dodatkowe informacje o docelowym odbiorcy.
Docelowe udziały w kliknięciach
Dynamiczny skrót możesz opublikować jako cel udostępniania bezpośredniego. Zobacz artykuł Publikowanie bezpośrednich celów udostępniania.
ShortcutManagerCompat
to nowy interfejs API AndroidX, który zapewnia zgodność wsteczną ze starym interfejsem DirectShare API. Jest to preferowany sposób publikowania celów udostępniania.
Podgląd tekstu
Gdy aplikacja udostępnia tekst, może wyświetlić opcjonalny podgląd treści w interfejsie panelu udostępniania.
Zobacz dodawanie podglądów tekstu sformatowanego.
Więcej informacji
Więcej informacji o udostępnianiu danych przez aplikacje znajdziesz w artykułach Wysyłanie prostych danych do innych aplikacji i Odbieranie prostych danych z innych aplikacji.
Ciemny motyw
Android 10 oferuje ciemny motyw, który dotyczy zarówno interfejsu systemu Android, jak i aplikacji działających na urządzeniu. Pełne informacje znajdziesz w artykule o ciemnym motywie.
Typy usług działających na pierwszym planie
Android 10 wprowadza atrybut pliku XML foregroundServiceType
, który należy uwzględnić w definicji kilku konkretnych usług. Możliwe jest przypisanie do danej usługi wielu typów usług działających na pierwszym planie, choć rzadko jest to właściwe.
W tabeli poniżej przedstawiono różne typy usług na pierwszym planie oraz usługi, w których przypadku należy zadeklarować konkretny typ:
Typ usługi na pierwszym planie | Przykładowy przypadek użycia usługi, która powinna zadeklarować ten typ |
---|---|
connectedDevice
| Monitorowanie urządzenia do noszenia śledzącego aktywność |
dataSync
| Pobieranie plików z sieci |
location
| Kontynuowanie działania wywołanego przez użytkownika |
mediaPlayback
| Odtwarzanie audiobooka, podcastu lub muzyki |
mediaProjection
| Nagrywanie filmu z ekranu urządzenia w krótkim czasie |
phoneCall
| Zarządzanie trwającymi połączeniami telefonicznymi |
Kotlin
Android 10 zawiera poniższe aktualizacje dotyczące programowania w aplikacji Kotlin.
Adnotacje o możliwości anulowania w przypadku interfejsów API libcore
Android 10 zwiększa zasięg adnotacji null w pakiecie SDK interfejsów API libcore. Te adnotacje umożliwiają deweloperom aplikacji, którzy korzystają z analizy null w Android Studio przy użyciu Kotlina lub Javy, aby uzyskiwać informacje o pustości podczas interakcji z tymi interfejsami API.
Normalnie w przypadku naruszenia umowy o wartości null w narzędziu Kotlin występują błędy kompilacji. Aby zapewnić zgodność z istniejącym kodem, dodane zostaną tylko adnotacje @RecentlyNullable
i @RecentlyNonNull
. Oznacza to, że przypadki naruszenia wartości null skutkują ostrzeżeniami, a nie błędami.
Dodatkowo wszystkie adnotacje @RecentlyNullable
lub @RecentlyNonNull
dodane w Androidzie 9 zostaną odpowiednio zmienione na @Nullable
lub @NonNull
.
Oznacza to, że w Androidzie 10 i nowszych wersjach naruszenia zasad dotyczących wartości null prowadzą do błędów, a nie ostrzeżeń.
Więcej informacji o zmianach w adnotacjach znajdziesz w artykule Android Pie SDK is now more Kotlin-friendly na blogu dla deweloperów aplikacji na Androida.
NDK
Android 10 zawiera te zmiany w NDK:
Ulepszone debugowanie własności deskryptora pliku
W Androidzie 10 dodaliśmy funkcję fdsan, która ułatwia znajdowanie i naprawianie problemów z własnością deskryptorów plików.
Błędy związane z niewłaściwym zarządzaniem własnością opisu pliku, które zwykle występują jako use-after-close i double-close, są analogiczne do błędów alokacji pamięci use-after-free i double-free, ale są znacznie trudniejsze do zdiagnozowania i naprawienia. Narzędzie fdsan próbuje wykryć lub zapobiec nieprawidłowemu zarządzaniu opisem pliku, wymuszając własność opisu pliku.
Więcej informacji o awariach związanych z tymi problemami znajdziesz w artykule Błąd wykryty przez fdsan. Więcej informacji o fdsan znajdziesz na stronie fdsan w Googlesource.
ELF TLS
Aplikacje utworzone za pomocą NDK na poziomie API 29 lub wyższym mogą używać ELF TLS zamiast emutls
. Dodano obsługę linkera statycznego i dynamicznego, aby umożliwić tę metodę obsługi zmiennych lokalnych wątku.
W przypadku aplikacji utworzonych z użyciem interfejsu API na poziomie 28 lub niższym wprowadziliśmy ulepszenia dotyczące libgcc/compiler-rt
, aby obejść niektóre problemy emutls
.
Więcej informacji znajdziesz w artykule Zmiany w Androidzie dla deweloperów korzystających z NDK.
Środowisko wykonawcze
Android 10 zawiera następującą zmianę czasu wykonywania.
uruchamianie czyszczenia pamięci na podstawie informacji z Mallinfo.
Kiedy obiekty Java na małej platformie odwołują się do dużych obiektów na stercie C++, obiekty C++ często można odzyskać dopiero po zebraniu obiektu Java i np. jego sfinalizowaniu. W poprzednich wersjach platforma szacowała rozmiary wielu obiektów C++, które były powiązane z obiektmi Java. Ta ocena nie zawsze była dokładna i czasami powodowała znaczne zwiększenie wykorzystania pamięci, ponieważ platforma nie była w stanie przeprowadzić procesu usuwania elementów nieużywanych.
W Androidzie 10 zbieracz pamięci (GC) śledzi całkowity rozmiar stosu przydzielonego przez system malloc()
, aby zapewnić, że duże przydzielenia malloc()
zawsze będą uwzględniane w obliczeniach uruchamiania GC. Aplikacje, które przeplatają dużą liczbę alokacji C++ z wykonaniem kodu Java, mogą w efekcie zwiększyć częstotliwość usuwania elementów. W przypadku innych aplikacji może nastąpić niewielki spadek.
Testowanie i debugowanie
Android 10 zawiera poniższe ulepszenia testowania i debugowania.
Ulepszenia śledzenia systemu na urządzeniu
Od Androida 10 możesz określać limity rozmiaru i czasu trwania śledzenia podczas wykonywania śledzenia systemu na urządzeniu. Gdy określisz jedną z tych wartości, system wykona długie śledzenie, okresowo kopiując bufor śledzenia do pliku docelowego podczas zapisywania śledzenia. Śledzenie kończy się, gdy osiągniesz określone limity rozmiaru lub czasu.
Za pomocą tych dodatkowych parametrów możesz testować inne przypadki użycia niż w przypadku standardowego śledzenia. Możesz na przykład diagnozować błąd związany z wydajnością, który występuje dopiero po długim czasie działania aplikacji. W takim przypadku możesz przeprowadzić długie śledzenie przez cały dzień, a następnie przeanalizować planowanie procesora, aktywność dysku, wątki aplikacji i inne dane w raporcie, aby określić przyczynę błędu.
W Androidzie 10 i nowszych pliki śledzenia są zapisywane w formacie, który można otworzyć w Perfetto, projekcie open source do instrumentacji i śledzenia wydajności. Możesz konwertować pliki śledzenia Perfetto na format Systrace.
Ulepszenia interfejsu TextClassifier
Android 10 udostępnia dodatkowe funkcje klasyfikacji tekstu w interfejsie TextClassifier
.
Wykrywanie języka
Metoda detectLanguage()
działa podobnie jak wcześniejsze metody klasyfikacji. Pobiera obiekt TextLanguage.Request
i zwraca obiekt TextLanguage
.
Obiekty TextLanguage
składają się z listy uporządkowanych par. Każda para zawiera język i odpowiednią wartość wskaźnika ufności dla klasyfikacji.
Sugerowane działania dotyczące rozmów
Metoda suggestConversationActions()
działa podobnie jak istniejące metody klasyfikacji. Funkcja ta otrzymuje obiekt ConversationActions.Request
i zwraca obiekt ConversationActions
.
Obiekty ConversationActions
składają się z listy obiektów ConversationAction
. Każdy obiekt ConversationAction
zawiera potencjalne sugerowane działanie i jego wynik pewności.
Inteligentne odpowiedzi i działania w powiadomieniach
Android 9 wprowadził możliwość wyświetlania sugerowanych odpowiedzi w powiadomieniu. Android 10 wzbogaca te możliwości o sugerowane działania oparte na intencjach. Platforma może też automatycznie generować sugestie. Aplikacje nadal mogą przesyłać własne sugestie lub zrezygnować z sugestii generowanych przez system.Interfejs API używany do generowania tych odpowiedzi jest częścią interfejsu TextClassifier
i jest również udostępniany bezpośrednio deweloperom w Androidzie 10.
Więcej informacji znajdziesz w sekcji o ulepszeniach TextClassifier.
Jeśli aplikacja zawiera własne sugestie, platforma nie generuje żadnych sugestii automatycznych. Jeśli nie chcesz, aby powiadomienia z aplikacji wyświetlały sugerowane odpowiedzi lub działania, możesz zrezygnować z generowanych przez system odpowiedzi i działań, używając setAllowGeneratedReplies()
i setAllowSystemGeneratedContextualActions()
.