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:
- Sprawdzanie 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 jego 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 osadzonego 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ę zmodyfikować skompilowany lokalnie kod na urządzeniu.
Więcej informacji znajdziesz w artykule Uruchamianie osadzonego 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 ważna wersja protokołu TLS, która zawiera ulepszenia wydajności i zabezpieczeń. 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 TLS na stronie Zmiany w zachowaniu we wszystkich aplikacjach.
Public Conscrypt API
Od Androida 10 dostawca zabezpieczeń Conscrypt udostępnia interfejs publiczny 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 sieciami i łącznością.
API połączenia z siecią Wi-Fi
Android 10 obsługuje połączenia peer-to-peer. Ta funkcja umożliwia aplikacji wyświetlenie użytkownikowi prośby o zmianę punktu dostępu, z którym połączone jest urządzenie, za pomocą elementu WifiNetworkSpecifier
, aby opisać właściwości żądanej sieci. Połączenie typu peer-to-peer jest używane do celów innych niż dostarczanie sieci, takich jak konfiguracja inicjacyjna 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 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 dotyczące sieci, z którą 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 artykule Wskazówki dotyczące 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óźnienie.
Android 10 rozszerza interfejs API blokady Wi-Fi, aby skutecznie obsługiwać tryb wysokiej wydajności i tryb o niskim opóźnieniu. 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 aplikacji do gier mobilnych działających w czasie rzeczywistym.
Specjalistyczne wyszukiwania w rozwiązaniu DNS
Android 10 dodaje obsługę zaawansowanych wyszukiwań DNS przy użyciu zarówno wyszukiwań w czystym tekście, 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
zapewnia ogólne, asynchroniczne rozwiązanie, które umożliwia wyszukiwanie rekordów typu SRV
i NAPTR
oraz 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, np. 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 zorientowane na połączenie (CoC)
Android 10 umożliwia aplikacji korzystanie z połączeń BLE CoC do przesyłania większych strumieni danych między 2 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 telefonią.
Ulepszenia jakości połączeń
Android 10 umożliwia zbieranie informacji o jakości bieżących połączeń IP Multimedia Subsystem (IMS), w tym jakości połączeń z siecią i do 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 znajdują się 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 udostępnia 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, gdy jest on zapisywany na dysku. - Jeśli wiesz, gdzie powinny być przechowywane pliki, możesz podać systemowi podpowiedź dotyczącą lokalizacji, w której mają 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. Pełne informacje znajdziesz w artykule Udostępnianie danych wejściowych audio.
Rejestrowanie odtwarzania dźwięku
Android 10 umożliwia aplikacjom rejestrowanie odtwarzania dźwięku z innych aplikacji. Pełne informacje znajdziesz w sekcji 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 0. 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.
Natywny interfejs MIDI API
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 MediaCodecInfo
, które zawierają więcej informacji o kodeki.
Więcej informacji znajdziesz w artykule Kodeki multimedialne.
Thermal API
Gdy urządzenia się przegrzeją, mogą ograniczyć działanie procesora lub karty graficznej, co może nieoczekiwanie wpłynąć na działanie aplikacji i gier. Aplikacje korzystające ze złożonej grafiki, intensywnych obliczeń lub ciągłej aktywności sieci są bardziej narażone na problemy, które mogą się różnić na poszczególnych urządzeniach w zależności od częstotliwości zegara i rdzenia, poziomu integracji, a także obudowy i formy 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, dzięki czemu system raportuje bieżący stan termiczny od lekkiego i umiarkowanego do poważnego, krytycznego, awaryjnego i wymagającego wyłączenia.
Gdy urządzenie zgłosi problemy z przegrzewaniem się, aplikacje i gry mogą pomóc w zmniejszeniu zużycia energii w różne sposoby. 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 wzbogacanie 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.
Interfejs Thermal API wymaga nowego poziomu HAL urządzenia. Jest on obecnie obsługiwany na urządzeniach Pixel z Androidem 10. Współpracujemy z partnerami, aby jak najszybciej zapewnić szeroką obsługę w ekosystemie.
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 bliskiej podczerwieni.
Możesz użyć tej funkcji, aby uzyskać monochromatyczny obraz. 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
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 metadanych głębi, aby stosować rozmazywanie w postprodukcji bez modyfikowania oryginalnych danych obrazu.
Specyfikację tego formatu znajdziesz w artykule Dynamic Depth Format.
Format pliku obrazu o wysokiej wydajności
Format pliku obrazu o wysokiej wydajności (HEIF) to standardowy format obrazu i wideo, który zapewnia lepsze kodowanie 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 ulepsza funkcję łączenia wielu aparatów w jeden logiczny aparat, która została wprowadzona w Androidzie 9 (poziom interfejsu API 28). Do interfejsu Camera2 API dodano:
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żesz wywoływać funkcję isTextEntryKey()
, aby określić, czy dany klawisz AccessibilityNodeInfo
reprezentuje klawisz wprowadzania tekstu, który jest częścią klawiatury lub klawiatury numerycznej.
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 dla 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
Możesz obsługiwać przypadki, gdy aplikacja używa wielu działań do wyświetlania nazwy użytkownika, hasła i innych pól, używając 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 pasował 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.
Pomaga to usłudze autouzupełniania wykrywać 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 referencyjnej Pop Frame firmy Oracle.
Interfejs API kontroli wyświetlania
Android 10 udostępnia interfejs API SurfaceControl
, który umożliwia dostęp do systemu kompilatora na niskim poziomie (SurfaceFlinger
). W przypadku większości użytkowników odpowiednim sposobem na wykorzystanie kompilatora jest SurfaceView. 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 w komponencie WebView
Android 10 wprowadza klasę abstrakcyjną WebViewRenderProcessClient
, której aplikacje mogą używać do wykrywania, czy WebView
przestała reagować. Aby korzystać z tych zajęć:
- Zdefiniuj własną podklasę i zaimplementuj jej metody
onRenderProcessResponsive()
ionRenderProcessUnresponsive()
. - Załącz instancję obiektu
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 usługa WebView
nie odpowiada, system wywołuje ją okresowo (nie częściej niż raz na 5 sekund), ale nie podejmuje żadnych innych działań.onRenderProcessUnresponsive()
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 Urządzenia, aby zmienić takie opcje, 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 otworzenie Ustawień 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 opuszczania 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
- Wyświetla ustawienia Wi-Fi, ale nie innych ustawień łą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 pobierania wyników w reakcji na żądanie aplikacje korzystające z interfejsu API Sharing Shortcuts publikują z wyprzedzeniem docelowe obiekty udostępniania. 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. Docelowe obiekty udostępniania pozostają w systemie do momentu zaktualizowania tej samej aplikacji lub jej odinstalowania.
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 tym, jak aplikacje mogą udostępniać dane, 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 Ciemny motyw.
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 przypadku których należy zadeklarować konkretny typ:
Typ usługi działającej 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 te zmiany dotyczące programowania w Kotlinie:
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 korzystającym z analizy możliwości wystąpienia wartości null w Kotlinie lub Javie w Android Studio uzyskiwanie informacji o wartościach null podczas interakcji z tymi interfejsami API.
Naruszenia zasad dotyczących wartości null w Kotlinie zwykle powodują błędy kompilacji. Aby zapewnić zgodność z dotychczasowym kodem, dodawane są tylko adnotacje @RecentlyNullable
i @RecentlyNonNull
. Oznacza to, że naruszenia zasad dotyczących możliwości występowania wartości pustych powodują wyświetlanie ostrzeżeń, a nie błędów.
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
Android 10 zawiera narzędzie fdsan, które ułatwia znajdowanie i rozwiązywanie problemów z własnością opisu pliku.
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 te zmiany w czasie wykonywania.
Wywoływanie czyszczenia pamięci na podstawie informacji o złogach
Gdy małe obiekty platformy Java odwołują się do ogromnych obiektów w kupce C++, obiekty C++ można często odzyskać tylko wtedy, gdy obiekt Java zostanie zebrany i na przykład sfinalizowany. 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 wykonać procesu usuwania elementów nieużywanych, kiedy było to konieczne.
W Androidzie 10 zbieracz śmieci (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. Inne aplikacje mogą działać nieco wolniej.
Testowanie i debugowanie
Android 10 zawiera te ulepszenia dotyczące testowania i debugowania:
Ulepszenia śledzenia na poziomie systemu
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 śledzone są zapisywane w formacie, który można otworzyć za pomocą Perfetto, projektu open source służącego do pomiaru i śledzenia wydajności. Możesz konwertować pliki śledzenia Perfetto na format Systrace.
Ulepszenia klasyfikatora tekstu
Android 10 udostępnia dodatkowe funkcje klasyfikacji tekstu w interfejsie TextClassifier
.
Wykrywanie języka
Metoda detectLanguage()
działa podobnie jak wcześniejsze metody klasyfikacji. Przyjmuje obiekt TextLanguage.Request
i zwraca obiekt TextLanguage
.
Obiekty TextLanguage
składają się z listy uporządkowanych par. Każda para zawiera lokalizację i odpowiadający jej wskaźnik 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 ufności.
Inteligentne odpowiedzi i działania w powiadomieniach
Android 9 wprowadził możliwość wyświetlania sugerowanych odpowiedzi w powiadomieniu. Android 10 rozszerza tę funkcję o możliwość uwzględniania sugerowanych działań na podstawie intencji. Platforma może też generować te sugestie automatycznie. Aplikacje nadal mogą wyświetlać własne sugestie lub rezygnować 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 dotyczącej ulepszeń usługi TextClassifier.
Jeśli aplikacja udostępnia 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()
.