Funkcje i interfejsy API Androida 10

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”. Zapoznaj się też ze zmianami zachowania Androida 10 (dotyczącymi aplikacji kierowanych na poziom interfejsu API 29wszystkich aplikacji) oraz zmianami w zakresie 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 po uwierzytelnieniu użytkownika za pomocą niejawnego sposobu biometrycznego nie należy wymagać od niego potwierdzenia. 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ę zmienić lokalnie skompilowany 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 poświęconej TLS na stronie ze zmianami zachowania 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 typu 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óźnienia.

Android 10 rozszerza interfejs API blokady Wi-Fi, aby skutecznie obsługiwać tryb wysokiej wydajności i tryb niskiego opóźnienia. Tryb oszczędzania energii Wi-Fi jest wyłączony w trybie wysokiej wydajności i niskiej latencji, a w trybie niskiej latencji można włączyć dalszą optymalizację opóźnień, 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 SRVNAPTR 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 zamiennika dla WPS, który został wycofany. 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 WifiP2pConfigWifiP2pManager 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 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 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ń nieznajomych numerów jako potencjalnych połączeń spamowych oraz automatycznego odrzucania takich połączeń 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 artykule Nagrywanie odtwarzania.

Pasek w powiadomieniach w stylu MediaStyle

Począwszy od Androida 10, MediaStyle powiadomienia wyświetlają suwak. 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 przez MediaMetadata.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.

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 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ć w zależności od urządzenia na podstawie 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ą listeneraPowerManagerze, 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 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.

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, którzy tworzą urządzenia, aby jak najszybciej zapewnić obsługę całego 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ń.

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 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 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:

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.

Komunikat głosowy 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 UI. 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 zawiera 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 systemowego modułu kompilującego (SurfaceFlinger). W przypadku większości użytkowników odpowiednim sposobem na wykorzystanie modułu kompilującego jest użycie interfejsu 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. Implementacja NDK zawiera interfejs API do ręcznej wymiany buforów z kreatorem. Jest to alternatywa dla użytkowników, którzy napotkali ograniczenia w BufferQueue.

Wykrywanie zawieszonego renderowania 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ęć:

  1. Zdefiniuj własną podklasę i zaimplementuj jej metody onRenderProcessResponsive()onRenderProcessUnresponsive().
  2. Załącz instancję obiektu WebViewRenderProcessClient do co najmniej 1 obiektu WebView.
  3. Jeśli usługa WebView przestanie odpowiadać, system wywoła metodę onRenderProcessUnresponsive() klienta, przekazując argumenty WebViewWebViewRenderProcess. (jeśli WebView jest procesem jednowątkowym, parametr WebViewRenderProcess 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 Ustawienia, aby zmienić takie rzeczy jak NFC czy dane mobilne, aby korzystać z aplikacji.

Rysunek 1. Użytkownik próbuje otworzyć stronę internetową, gdy urządzenie nie jest połączone z siecią. Chrome wyświetla panel ustawień Połączenie z internetem.

Rysunek 2. Użytkownik może włączyć Wi-Fi i wybrać sieć bez wychodzenia z aplikacji Chrome.

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 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
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 Sharing Shortcuts API 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 ShortcutInfoAPI, 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 udostępnienia.

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 aplikacjiOdbieranie 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 których przypadku 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, którzy korzystają 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@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 zamiast 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 nieprawidłowym zarządzaniem własnością opisu pliku, które zwykle występują jako use-after-closedouble-close, są analogiczne do błędów alokacji pamięci use-after-freedouble-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 o sklepie

Gdy małe obiekty platformy Java odwołują się do dużych 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 zbierania elementów usuniętych z pamięci, gdy było to konieczne.

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. 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. Prześledzenie zostanie zakończone, 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 przechwycić długi ślad 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 Peretto 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 przyjmuje obiekt ConversationActions.Request i zwraca obiekt ConversationActions.

Obiekty ConversationActionsskładają się z listy obiektów ConversationAction. Każdy obiekt ConversationAction zawiera potencjalne sugerowane działanie i jego wskaźnik ufności.

Inteligentne odpowiedzi/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()setAllowSystemGeneratedContextualActions().