Funkcje i interfejsy API Androida 10

Android 10 oferuje użytkownikom oraz deweloperom świetne funkcje i możliwości. W tym dokumencie opisujemy, z czego mogą korzystać deweloperzy.

Aby dowiedzieć się więcej o interfejsach API, przeczytaj raport o różnicach między interfejsami API lub zajrzyj do dokumentacji interfejsu Android API – poszukaj interfejsów API, które zostały dodane na poziomie API 29. Zapoznaj się też ze zmianami w działaniu Androida 10 (w przypadku aplikacji kierowanych na interfejs API na poziomie 29 i wszystkich aplikacji), a także zmianami w ochronie prywatności, aby dowiedzieć się, w jakich obszarach zmiany na platformie mogą wpłynąć na Twoje aplikacje.

Ulepszenia zabezpieczeń

Android 10 wprowadza wiele funkcji zabezpieczeń, które zostały opisane w kolejnych sekcjach.

Ulepszone okna uwierzytelniania biometrycznego

Android 10 wprowadza te ulepszenia w zakresie obsługi uwierzytelniania biometrycznego:

  • Sprawdzenie możliwości uwierzytelniania biometrycznego.
  • Mechanizm awaryjny, który pozwala użytkownikowi uwierzytelnić się z użyciem kodu PIN, wzoru lub hasła urządzenia, jeśli nie może uwierzytelnić się za pomocą danych biometrycznych.
  • Wskazówka informująca, że system nie wymaga potwierdzenia od użytkownika po uwierzytelnieniu przez użytkownika za pomocą niejawnej metody biometrycznej. Możesz na przykład poinformować system, że dalsze potwierdzanie nie powinno być wymagane, gdy użytkownik uwierzytelni się za pomocą uwierzytelniania twarzą.

Uruchamianie umieszczonego kodu DEX bezpośrednio z pliku APK

Od Androida 10 możesz skonfigurować platformę tak, aby uruchamiała kod DEX bezpośrednio z pliku APK Twojej aplikacji. Ta opcja może zapobiec atakowi, jeśli osoba przeprowadzająca atak zdołała kiedyś manipulować lokalnie skompilowanym kodem na urządzeniu.

Więcej informacji znajdziesz w artykule Uruchamianie umieszczonego kodu DEX bezpośrednio z pliku APK.

Obsługa TLS 1.3

Android 10 obsługuje standard TLS 1.3. TLS 1.3 to duża wersja standardu TLS, obejmująca zwiększające wydajność i lepsze zabezpieczenia. Nasze testy porównawcze wskazują, że bezpieczne połączenia można nawiązać nawet o 40% szybciej niż przy użyciu protokołu TLS 1.3 w porównaniu z protokołem TLS 1.2.

Więcej informacji o wdrażaniu przez nas protokołu TLS 1.3 znajdziesz w sekcji dotyczącej TLS na stronie Zmiany w działaniu wszystkich aplikacji.

Interfejs Public Conscrypt API

Od Androida 10 dostawca zabezpieczeń Conscrypt zawiera publiczny interfejs API do obsługi protokołu TLS.

Kolekcja klas w obiekcie android.net.ssl zawiera statyczne metody dostępu do funkcji, które są niedostępne w ogólnych interfejsach API javax.net.ssl. Nazwy tych klas można wywnioskować jako liczbę mnogą odpowiedniej klasy javax.net.ssl. Na przykład kod działający w instancjach javax.net.ssl.SSLSocket może używać metod z 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 peer-to-peer jest używane do celów niezwiązanych z udostępnianiem sieci, np. do wczytywania konfiguracji urządzeń dodatkowych, takich jak Chromecast czy sprzęt Google Home.

Więcej informacji znajdziesz w artykule o interfejsie Wi-Fi Network Request API na potrzeby połączeń peer-to-peer.

Interfejs API sugestii dotyczących sieci Wi-Fi

Android 10 obsługuje aplikację, aby prosić użytkownika o połączenie z punktem dostępu Wi-Fi. Możesz podać sugestie, z którą siecią chcesz się połączyć. Platforma ostatecznie zdecyduje, który punkt dostępu zaakceptuje, na podstawie danych z Twoich i innych aplikacji.

Więcej informacji o tej funkcji znajdziesz w sekcji Sugestie Wi-Fi.

Udoskonalenia w trybie wysokiej wydajności i niskiego opóźnienia Wi-Fi

Android 10 umożliwia wskazówkę dotyczącą modemu bazowego w celu zminimalizowania opóźnień.

Android 10 rozszerza interfejs API blokady Wi-Fi, aby skutecznie obsługiwać tryb wysokiej wydajności i tryb niskiego opóźnienia. Oszczędzanie energii przez Wi-Fi jest wyłączone w trybie wysokiej wydajności i małego opóźnienia. W zależności od obsługi modemu może być też włączona dalsza optymalizacja opóźnienia.

Tryb małego opóźnienia jest włączony tylko wtedy, gdy aplikacja odbierająca blokadę działa na pierwszym planie i ma włączony ekran. Tryb niskiego opóźnienia jest szczególnie przydatny w przypadku gier mobilnych w czasie rzeczywistym.

Specjalistyczne wyszukiwania w resolverze 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 system rozpoznawania DNS platformy obsługiwał tylko rekordy A i AAAA, co umożliwiało wyszukiwanie tylko adresów IP powiązanych z nazwą, ale nie obsługiwały ż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 analiza odpowiedzi jest pozostawiana do wykonania aplikacji.

W przypadku aplikacji opartych na NDK otwórz android_res_nsend.

Łatwe połączenie Wi-Fi

Android 10 umożliwia korzystanie z usługi Easy Connect do obsługi administracyjnej danych logowania Wi-Fi na urządzeniu równorzędnym, co zastępuje wycofany protokół WPS. Aplikacje mogą zintegrować Easy Connect z procesem konfiguracji i obsługi administracyjnej, korzystając z intencji ACTION_PROCESS_WIFI_EASY_CONNECT_URI.

Więcej informacji o tej funkcji znajdziesz na stronie Wi-Fi Easy Connect.

Interfejs API połączenia Wi-Fi Direct

Klasy interfejsu API WifiP2pConfig i WifiP2pManager zostały zaktualizowane w Androidzie 10, aby obsługiwać szybkie nawiązywanie połączeń z Wi-Fi Direct na podstawie wcześniej określonych informacji. Te informacje są udostępniane przez kanał boczny, np. Bluetooth lub NFC.

Poniższy przykładowy kod pokazuje, jak utworzyć grupę przy użyciu wcześniej określonych 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 przy użyciu danych logowania, zastąp manager.createGroup() następującym fragmentem:

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 używanie połączeń BLE CoC do przesyłania większych strumieni danych między 2 urządzeniami BLE. Aby uprościć implementację, interfejs ten wykorzystuje mechanizmy Bluetootha i łączności.

Funkcje telefoniczne

Android 10 zawiera kilka ulepszeń związanych z telefonami.

Poprawa jakości połączeń

Android 10 umożliwia gromadzenie informacji o jakości bieżą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 identyfikacja rozmówcy

Android 10 udostępnia Twojej aplikacji sposób identyfikowania połączeń spoza książki adresowej jako potencjalnych spamowych połączeń i ich dyskretnego odrzucania w imieniu użytkownika. Informacje o zablokowanych połączeniach są rejestrowane w rejestrze połączeń jako zablokowane połączenia, co zapewnia użytkownikowi większą przejrzystość w przypadku nieodebranych połączeń. Używanie tego interfejsu API eliminuje konieczność uzyskiwania od użytkownika uprawnień READ_CALL_LOG w celu obsługi funkcji filtrowania połączeń i identyfikacji rozmówcy.

Interfejs API usługi przekierowania wywołań

Android 10 zmienia sposób obsługi intencji połączeń. Transmisja NEW_OUTGOING_CALL została wycofana i zastąpiona interfejsem API CallRedirectionService. Interfejs CallRedirectionService API udostępnia interfejsy, które umożliwiają modyfikowanie wywołań wychodzących przez platformę Androida. Aplikacje innych firm mogą na przykład anulować rozmowy i przekierowywać je przez VoIP.

Ulepszenia dotyczące tworzenia plików w pamięci zewnętrznej

Oprócz wprowadzenia ograniczonego miejsca na dane Android 10 dodaje te możliwości związane z pamięcią zewnętrzną:

  • Możesz użyć flagi IS_PENDING, aby przyznać aplikacji wyłączny dostęp do pliku multimedialnego zapisywanego na dysku.
  • Jeśli znasz konkretną lokalizację, w której mają być przechowywane pliki, możesz podać dla systemu wskazówkę, gdzie będą zapisywane nowo utworzone pliki.
  • Każde zewnętrzne urządzenie pamięci masowej ma unikalną nazwę woluminu.

Multimedia i grafika

Android 10 wprowadza te nowe funkcje związane z multimediami i grafiką oraz interfejsy API:

Udostępnianie wejścia audio

Android 10 daje możliwość jednoczesnego korzystania przez 2 aplikacje z wejścia audio. Więcej informacji znajdziesz w artykule Udostępnianie wejścia audio.

Przechwytywanie odtwarzania dźwięku

Android 10 umożliwia aplikacji nagrywanie dźwięku z innych aplikacji. Więcej informacji znajdziesz w artykule Nagrywanie odtwarzania.

Pasek przewijania w powiadomieniach MediaStyle

Od Androida 10 powiadomienia z aplikacji MediaStyle mają pasek przewijania. Pasek przewijania pokazuje postęp odtwarzania od PlaybackState.getPosition(). W niektórych przypadkach można go użyć do znalezienia miejsca w programie odtwarzania. Wygląd i zachowanie paska przewijania sterują te reguły:

  • Pasek przewijania pojawia się, jeśli istnieje aktywna pozycja MediaSession, a jej czas trwania (określony przez MediaMetadata.METADATA_KEY_DURATION) jest dłuższy niż zero. Oznacza to, że pasek nie pojawia się w przypadku transmisji nieokreślonych, takich jak transmisje na żywo i radio.
  • Jeśli w sesji zaimplementowano element ACTION_SEEK_TO, użytkownik może przeciągać pasek przewijania, aby sterować miejscem odtwarzania.

Natywny interfejs MIDI API

Interfejs Android Native MIDI API (AMidi) daje programistom aplikacji możliwość wysyłania i odbierania danych MIDI za pomocą kodu w C/C++, co pozwala na ściślejszą integrację z logiką dźwięku/sterowania C/C++ i minimalizuje potrzebę korzystania z JNI.

Więcej informacji znajdziesz na stronie 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 multimediów.

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.

Na Androidzie 10 aplikacje i gry mogą korzystać z interfejsu The API, aby monitorować zmiany na urządzeniu i podejmować działania w celu ograniczenia zużycia energii do przywrócenia normalnej temperatury. Aplikacje rejestrują detektor w usłudze PowerManager, za pomocą którego system zgłasza obecny stan termiczny: od lekkiego, umiarkowanego do poważnego, krytycznego, alarmowego i 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ść lub szybkość transmisji bitów albo zmniejszyć ruch sieciowy, aplikacja aparatu może wyłączyć lampę błyskową lub intensywne ulepszanie obrazu, gra może zmniejszyć liczbę klatek lub wielokąty, aplikacja do multimediów może zmniejszyć głośność głośników, a aplikacja z mapami – 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 zapewnić szeroki zakres wsparcia dla tego ekosystemu.

Aparat i zdjęcia

Android 10 wprowadza te nowe funkcje dotyczące aparatu i obrazu:

Obsługa kamery monochromatycznej

W Androidzie 9 (poziom interfejsu API 28) wprowadzono najpierw możliwość korzystania z aparatu monochromatycznego. W Androidzie 10 wprowadziliśmy kilka ulepszeń w obsłudze aparatu monochromatycznego:

  • Obsługa formatu strumienia Y8 w celu zwiększenia wydajności pamięci.
  • Obsługa monochromatycznego przechwytywania nieprzetworzonego pliku DNG.
  • Wprowadzenie wyliczenia MONO i NIR CFA w celu odróżnienia aparatów monochromatycznych i aparatów bliskich podczerwieni.

Ta funkcja umożliwia przechwytywanie natywnego obrazu monochromatycznego. Logiczne urządzenie z wieloma aparatami może używać kamery monochromatycznej jako fizycznego aparatu podrzędnego, aby uzyskać lepszą jakość zdjęć przy słabym oświetleniu.

Format dynamicznej głębi

Począwszy od Androida 10 aparaty mogą przechowywać dane głębi obrazu w oddzielnym pliku, korzystając z nowego schematu o nazwie Dynamic Depth Format (DDF). Aplikacje mogą zażądać zarówno obrazu JPG, jak i jego metadanych o głębi, i wykorzystywać te informacje do zamazywania w trakcie przetwarzania danych bez modyfikowania oryginalnych danych obrazu.

Specyfikację tego formatu znajdziesz w sekcji Format dynamicznej głębi.

Format pliku graficznego 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 na stronie HEIC.

Ulepszenia trybu wielu kamer

Android 10 ułatwia połączenie kilku kamer 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:

Interfejs API usług ułatwień dostępu

Android 10 wprowadza te nowe funkcje i interfejsy API ułatwień dostępu:

Flaga klucza wpisu 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

Jeśli użytkownik musi użyć skrótu ułatwień dostępu, aby uruchomić usługę ułatwień dostępu, Android 10 zezwala na wyświetlanie okna dialogowego z promptem o zamianie tekstu na mowę, jeśli usługa tego zażąda.

Skrót ułatwień dostępu po włączeniu nawigacji przy użyciu gestów

Gdy na Androidzie 10 jest włączona funkcja nawigacji przy użyciu gestów, przycisk ułatwień dostępu nie jest widoczny ani dostępny. Aby uzyskać dostęp do menu usług ułatwień dostępu, użytkownik musi 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ą uruchomić skrót ułatwień dostępu na klawiaturze fizycznej, naciskając Control + Alt + Z.

Ulepszenie kontrolera klawiatury ekranowej

W Androidzie 10 usługi ułatwień dostępu mogą prosić o wyświetlenie klawiatury ekranowej nawet wtedy, gdy urządzenie wykryje podłączoną klawiaturę twardą. Użytkownicy mogą zastąpić to zachowanie.

Zdefiniowane przez użytkownika limity czasu ułatwień dostępu

Android 10 wprowadza interfejs API getRecommendedTimeoutMillis(). Ta metoda obsługuje zdefiniowane przez użytkownika limity czasu w przypadku interaktywnych i nieinteraktywnych elementów interfejsu. Na zwracaną wartość wpływają zarówno preferencje użytkownika, jak i interfejsy API usługi ułatwień dostępu.

Ulepszenia autouzupełniania

Android 10 zawiera poniższe ulepszenia usługi autouzupełniania.

Żądania autouzupełniania związane ze zgodnością

Aby określić, czy żądanie autouzupełniania zostało wygenerowane w trybie zgodności, możesz użyć flagi FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST.

Zapisuj jednocześnie nazwę użytkownika i hasło

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 zapisywania

Pole hasła możesz wyświetlić lub ukryć w oknie zapisywania, ustawiając detektor działań w tym oknie i zmieniając widoczność odpowiedniego widoku zdalnego hasła.

Obsługa aktualizowania zbiorów danych

Autouzupełnianie może aktualizować dotychczasowe hasła. Jeśli na przykład użytkownik zapisał nowe hasło, a następnie zapisze nowe, autouzupełnianie prosi o zaktualizowanie istniejącego hasła zamiast zapisania nowego.

Ulepszenia klasyfikacji pól

Android 10 zawiera poniższe ulepszenia interfejsu Field Classification API.

Konstruktor UserData.Builder

Konstruktor UserData.Builder został zmieniony, aby lepiej dopasować go do wzorca Builder.

Zezwalaj na mapowanie wartości na wiele typów identyfikatorów kategorii

Gdy używasz UserData.Builder w Androidzie 10, możesz teraz mapować wartość na wiele typów identyfikatorów kategorii. W poprzednich wersjach wyjątek został zgłoszony, jeśli wartość została dodana więcej niż raz.

Ulepszona obsługa numerów kart kredytowych

Klasyfikacja pól może teraz wykrywać liczby 4-cyfrowe jako ostatnie 4 cyfry numeru karty kredytowej.

Obsługa klasyfikacji pól w konkretnej aplikacji

Android 10 udostępnia funkcję FillResponse.setUserData(), która umożliwia konfigurowanie danych użytkownika aplikacji na czas sesji. Ułatwia to usłudze autouzupełniania typy pól z zawartością specyficzną dla aplikacji.

Elementy interfejsu i elementy sterujące systemu

Android 10 ma następujące ulepszenia interfejsu użytkownika:

Obsługa ograniczeń JVMTI PopFrame

Android 10 obsługuje obsługę can_pop_frames w implementacji JVMTI w Androidzie. Podczas debugowania funkcja ta umożliwia ponowne uruchamianie funkcji po wstrzymaniu w punkcie przerwania i dostosowaniu elementów lokalnych, globalnych lub implementacji funkcji. Więcej informacji znajdziesz na stronie z informacjami o platformie Pop Frame w Oracle.

Interfejs Surface Control API

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 SurfaceControl API może być przydatny w niektórych przypadkach, na przykład:

  • Synchronizacja wielu platform
  • Osadzanie powierzchni między procesami
  • Zarządzanie od początku śledzenia na niższym poziomie

Interfejs API SurfaceControl jest dostępny zarówno w powiązaniach SDK, jak i NDK. Implementacja NDK obejmuje interfejs API do ręcznej wymiany buforów z kompozytorem. To alternatywa dla użytkowników, którzy natknęli się na ograniczenia BufferQueue.

Wykrywanie zawieszonego mechanizmu renderowania w WebView

Android 10 wprowadza klasę abstrakcyjną WebViewRenderProcessClient, której aplikacje mogą używać do wykrywania, czy WebView nie odpowiada. Aby użyć tych zajęć:

  1. Zdefiniuj własną podklasę i zaimplementuj jej metody onRenderProcessResponsive() i onRenderProcessUnresponsive().
  2. Dołącz instancję WebViewRenderProcessClient do co najmniej 1 obiektu WebView.
  3. Jeśli WebView przestanie odpowiadać, system wywoła metodę onRenderProcessUnresponsive() klienta, przekazując parametry WebView i WebViewRenderProcess. (Jeśli WebView to pojedynczy proces, parametr WebViewRenderProcess ma wartość null). Aplikacja może wykonać odpowiednie działanie, np. wyświetlić użytkownikowi okno z pytaniem, czy chce zatrzymać renderowanie.

Jeśli WebView nie odpowiada, system co jakiś czas wywołuje onRenderProcessUnresponsive() (nie częściej niż co 5 sekund), ale nie wykonuje żadnego innego działania. Jeśli WebView ponownie 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 aplikacji. Dzięki temu użytkownicy nie muszą wchodzić w Ustawienia, aby zmienić ustawienia takie jak NFC lub mobilna transmisja danych, 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łączenia z internetem...

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

Załóżmy na przykład, że użytkownik otwiera przeglądarkę w trybie samolotowym. Przed Androidem 10 aplikacja mogła wyświetlać tylko ogólny komunikat z prośbą o otwarcie Ustawienia w celu przywrócenia połączenia. Na Androidzie 10 przeglądarka może wyświetlić wbudowany panel z kluczowymi ustawieniami łączności, takimi jak tryb samolotowy, Wi-Fi (w tym sieci w pobliżu) czy mobilna transmisja danych. Za jego pomocą użytkownicy mogą przywrócić połączenie bez opuszczania aplikacji.

Aby wyświetlić panel ustawień, wywołaj intencję z jednym z tych działań 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ć jednym z tych elementów:

ACTION_INTERNET_CONNECTIVITY
Pokazuje ustawienia związane z połączeniami z internetem, np. tryb samolotowy, Wi-Fi i mobilna transmisja danych.
ACTION_WIFI
Pokazuje ustawienia Wi-Fi, ale nie inne ustawienia łączności. Jest to przydatne w aplikacjach, które potrzebują połączenia Wi-Fi, by przesyłać lub pobierać duże pliki.
ACTION_NFC
Pokazuje 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 wiele ulepszeń w udostępnianiu:

Interfejs Share Shortcuts API

Udostępnianie skrótów API 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. Tak działa ShortcutManager. Ponieważ te 2 interfejsy API są podobne, rozszerzyliśmy interfejs ShortcutInfo API, aby ułatwić korzystanie z obu tych funkcji. Za pomocą interfejsu Share Shortcuts API możesz bezpośrednio przypisywać kategorie lub osoby do udostępnianego celu. Cele udostępniania pozostają w systemie do czasu, aż ta sama aplikacja je zaktualizuje lub odinstaluje.

Starszy mechanizm bezpośredniego udostępniania nadal działa, ale korzystające z niego aplikacje mają niższy priorytet niż aplikacje korzystające z interfejsu Share Shortcuts API.

ShortcutInfo.Builder dodaje i udoskonala metody przekazywania dodatkowych informacji o docelowym udostępnianiu.

Cele udostępniania bezpośredniego

Możesz opublikować skrót dynamiczny jako cel bezpośredniego udostępniania. Przeczytaj artykuł Publikowanie docelowych wartości udziału bezpośredniego.

ShortcutManagerCompat to nowy interfejs API AndroidX, który zapewnia zgodność wsteczną ze starym interfejsem DirectShare API. Jest to preferowany sposób publikowania wartości docelowych udziału.

Podgląd tekstu

Gdy aplikacja udostępnia treść tekstową, może wyświetlić jej opcjonalny podgląd w interfejsie arkusza udostępniania.

Patrz Dodawanie podglądu 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 ma 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 foregroundServiceType pliku manifestu XML, który dołączasz do definicji kilku konkretnych usług. Istnieje możliwość, że w rzadkich przypadkach, przypisanie do konkretnej usługi wielu typów usług działających na pierwszym planie.

W tabeli poniżej znajdziesz różne typy usług na pierwszym planie i usługi, w których warto zadeklarować określony typ:

Typ usługi działającej na pierwszym planie Przykład użycia usługi, która powinna deklarować ten typ
connectedDevice Monitoruj swój tracker aktywności
dataSync Pobieranie plików z sieci
location Kontynuuj działanie inicjowane przez użytkownika
mediaPlayback Odtwarzanie audiobooka, podcastu lub muzyki
mediaProjection Nagrywaj filmy z wyświetlacza urządzenia w krótkim czasie
phoneCall Obsługa trwającego połączenia telefonicznego

Kotlin

Android 10 zawiera poniższe aktualizacje dotyczące programowania w aplikacji Kotlin.

Adnotacje dotyczące wartości null w interfejsach API libcore

Android 10 zwiększa zasięg adnotacji o wartości null w pakiecie SDK dla interfejsów API libcore. Te adnotacje umożliwiają deweloperom aplikacji, którzy korzystają z analizy null w Android Studio za pomocą 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.

Oprócz tego wszystkie adnotacje @RecentlyNullable i @RecentlyNonNull dodane w Androidzie 9 zmienią się odpowiednio na @Nullable i @NonNull. Oznacza to, że w Androidzie 10 i nowszych przypadkach naruszenia zasad dotyczących wartości null prowadzą do błędów, a nie ostrzeżeń.

Więcej informacji o zmianach w adnotacjach znajdziesz na blogu dla deweloperów aplikacji na Androida w sekcji Pakiet Android Pie SDK jest teraz bardziej przyjazny dla Kotlin.

NDK

Android 10 zawiera następujące zmiany 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ściwą obsługą własności deskryptora pliku, przeważnie określane jako use-after-close i double-close, przypominają błędy alokacji pamięci use-after-free i double-free, ale zazwyczaj znacznie trudniej jest zdiagnozować i naprawić błędy deskryptora własności. fdsan próbuje wykryć lub zablokować deskryptor własności pliku przez egzekwowanie błędnego deskryptora pliku.

Więcej informacji o awariach związanych z tymi problemami znajdziesz w artykule Błąd wykryty przez fdsan. Więcej informacji na temat fdsan znajdziesz na stronie Googlesource o fdsan.

ELF TLS

Aplikacje utworzone przy użyciu NDK z minimalnym poziomem interfejsu API 29 mogą używać ELF TLS zamiast emutls. Dodaliśmy obsługę dynamicznego i statycznego tagu łączącego, aby obsługiwać tę metodę obsługi zmiennych lokalnych wątków.

W aplikacjach utworzonych dla interfejsu API na poziomie 28 lub niższym wprowadziliśmy ulepszenia w libgcc/compiler-rt, aby rozwiązać niektóre problemy z emutls.

Więcej informacji znajdziesz w artykule o zmianach Androida dla deweloperów NDK.

Czas trwania

Android 10 obejmuje tę zmianę środowiska wykonawczego.

Wyzwalanie czyszczenia pamięci opartego na Mallinfo

Kiedy obiekty Java na małych platformach 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 oszacowała rozmiary wielu obiektów w języku C++ powiązanych z obiektami Java. To oszacowanie nie zawsze było dokładne, a czasami skutkowało znacznym wzrostem wykorzystania pamięci, ponieważ platformie nie udało się wyczyścić czyszczenia pamięci, gdy powinno to zrobić.

W Androidzie 10 moduł czyszczenia pamięci śledzi łączny rozmiar sterty przydzielonej przez system malloc(), dzięki czemu w obliczeniach wywoływanych przez GC zawsze są uwzględniane duże przydziały malloc(). W rezultacie aplikacje przeplatające dużą liczbę alokacji C++ z wykonywaniem w języku Java mogą odnotować wzrost częstotliwości czyszczenia pamięci. 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

W Androidzie 10 możesz określić limity rozmiaru i czasu trwania logu czasu wykonywanego podczas śledzenia systemu na urządzeniu. Gdy podasz dowolną z tych wartości, system przeprowadzi długie śledzenie, a następnie okresowo skopiuje bufor śledzenia do pliku docelowego. Śledzenie kończy się po osiągnięciu określonego przez Ciebie limitu rozmiaru lub czasu trwania.

Użyj tych dodatkowych parametrów do testowania innych przypadków użycia niż w przypadku standardowego logu czasu. Możesz np. diagnozować błąd związany z wydajnością, który pojawia się dopiero po długim czasie działania aplikacji. W takim przypadku możesz zarejestrować długi log czasu z całego dnia, a potem przeanalizować algorytm szeregowania procesora, aktywność dysku, wątki aplikacji i inne dane z raportu, 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 przekonwertować 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 do dotychczasowych metod klasyfikacji. Pobiera obiekt TextLanguage.Request i zwraca obiekt TextLanguage.

Obiekty TextLanguage składają się z listy par uporządkowanych. Każda para zawiera język i odpowiedni wskaźnik ufności dla klasyfikacji.

Sugerowane działania dotyczące rozmowy

Metoda suggestConversationActions() działa podobnie do istniejących metod klasyfikacji. Odbiera obiekt ConversationActions.Request i zwraca obiekt ConversationActions.

ConversationActions składa się z listy obiektów ConversationAction. Każdy obiekt ConversationAction zawiera potencjalne sugerowane działanie i jego wskaźnik ufności.

Inteligentne odpowiedzi i działania w powiadomieniach

W Androidzie 9 pojawiła się możliwość wyświetlania sugerowanych odpowiedzi w powiadomieniu. Android 10 rozszerza 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 służący do generowania tych odpowiedzi jest częścią TextClassifier i został bezpośrednio udostępniony deweloperom Androida 10. Więcej informacji znajdziesz w sekcji o ulepszeniach TextClassifier.

Jeśli aplikacja przekazuje własne sugestie, platforma nie generuje żadnych automatycznych sugestii. Jeśli nie chcesz, aby w powiadomieniach Twojej aplikacji pojawiały się sugerowane odpowiedzi lub działania, możesz zrezygnować z odpowiedzi i działań generowanych przez system, używając opcji setAllowGeneratedReplies() i setAllowSystemGeneratedContextualActions().