Funkcje i interfejsy API Androida 10

Android 10 oferuje użytkownikom i deweloperom świetne funkcje i możliwości. W tym dokumencie znajdziesz opis funkcji dostępnych dla deweloperów.

Aby dowiedzieć się więcej o interfejsach API, przeczytaj raport o różnicach między interfejsami API lub zapoznaj się z dokumentacją API Androida – szukaj interfejsów API, które zostały „dodane na poziomie 29”. Zapoznaj się też ze zmianami w działaniu Androida 10 (w przypadku aplikacji kierowanych na interfejs API na poziomie 29 i w przypadku wszystkich aplikacji) oraz ze zmianami w ochronie prywatności, aby poznać obszary, w których zmiany platformy mogą wpływać na Twoje aplikacje.

Ulepszenia zabezpieczeń

Android 10 oferuje szereg funkcji zabezpieczeń, których podsumowanie znajdziesz w sekcjach poniżej.

Ulepszone okna uwierzytelniania biometrycznego

W Androidzie 10 wprowadziliśmy te ulepszenia w zakresie uwierzytelniania biometrycznego:

  • Kontrola możliwości uwierzytelniania biometrycznego.
  • Mechanizm zastępczy, który umożliwia uwierzytelnienie użytkownika przy użyciu kodu PIN, wzoru lub hasła urządzenia, gdy nie może się uwierzytelnić za pomocą danych biometrycznych.
  • Wskazówka informująca system, że nie ma wymagać potwierdzenia użytkownika po uwierzytelnieniu użytkownika przy użyciu niejawnej modalności biometrycznej. Możesz na przykład poinformować system, że po uwierzytelnieniu użytkownika za pomocą uwierzytelniania twarzą nie jest wymagane żadne dalsze potwierdzenie.

Uruchamiaj umieszczony kod DEX bezpośrednio z pliku APK

Od Androida 10 możesz poprosić platformę o uruchamianie umieszczonego kodu DEX bezpośrednio z pliku APK aplikacji. Ta opcja może zapobiec atakom, jeśli hakerowi kiedykolwiek uda się zmodyfikować skompilowany lokalnie kod na urządzeniu.

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

Obsługa TLS 1.3

Android 10 dodaje obsługę TLS 1.3. TLS 1.3 to główna wersja standardu TLS, która poprawia wydajność i zwiększa bezpieczeństwo. Z naszych testów porównawczych wynika, że bezpieczne połączenia TLS 1.3 można nawiązywać nawet o 40% szybciej niż w przypadku TLS 1.2.

Więcej informacji o wdrażaniu protokołu TLS 1.3 znajdziesz w sekcji dotyczącej TLS opisanej w artykule o zmianach w działaniu wszystkich aplikacji.

Public Conscrypt API

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

Zbiór klas w zadaniu android.net.ssl zawiera statyczne metody uzyskiwania dostępu do funkcji, które są niedostępne w ogólnych interfejsach API javax.net.ssl. Nazwy tych klas można wywnioskować w postaci liczby mnogiej odpowiedniej klasy w javax.net.ssl. Na przykład kod, który działa na wystąpieniach obiektu javax.net.ssl.SSLSocket, może zamiast tego używać metod z SSLSockets.

Funkcje łączności

Android 10 zawiera kilka ulepszeń związanych z siecią i połączeniami.

Interfejs API połączenia z siecią Wi-Fi

Android 10 obsługuje połączenia peer-to-peer. Ta funkcja umożliwia aplikacji żądanie zmiany punktu dostępu, z którym połączone jest urządzenie, za pomocą metody WifiNetworkSpecifier do opisania właściwości żądanej sieci. Połączenie peer-to-peer jest wykorzystywane do celów niezwiązanych z udostępnianiem sieci, takich jak konfigurowanie rozruchu urządzeń dodatkowych, takich jak Chromecast czy sprzęt Google Home.

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

Interfejs API sugestii sieci Wi-Fi

Android 10 obsługuje teraz wyświetlanie przez aplikację prośby o połączenie się z punktem dostępu Wi-Fi. Możesz też podać sugestie, z którą siecią chcesz się połączyć. Ostatecznie platforma wybierze punkt dostępu, który zaakceptuje, na podstawie danych wejściowych od Ciebie i innych aplikacji.

Więcej informacji o tej funkcji znajdziesz w sekcji Sugestie dotyczące sieci Wi-Fi.

Ulepszenia trybów wysokiej wydajności i małego opóźnienia w sieci Wi-Fi

Android 10 umożliwia podanie podpowiedzi do modemu, aby zminimalizować opóźnienie.

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

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

Specjalistyczne wyszukiwania w programie do rozpoznawania nazw DNS

Android 10 ma wbudowaną obsługę wyspecjalizowanych wyszukiwań DNS z wykorzystaniem wyszukiwania nieszyfrowanego i trybu DNS-over-TLS. Wcześniej narzędzie do rozpoznawania nazw DNS platformy obsługiwało tylko rekordy A i AAAA, które umożliwiały wyszukiwanie tylko adresów IP powiązanych z daną nazwą, ale nie obsługiwały żadnych innych typów rekordów. Interfejs API DnsResolver zapewnia ogólną, asynchroniczną rozdzielczość, umożliwiając wyszukiwanie rekordów w rekordach SRV, NAPTR i innych. Pamiętaj, że analiza odpowiedzi zależy od aplikacji.

Informacje na temat aplikacji opartych na pakiecie NDK znajdziesz tutaj: android_res_nsend.

Proste połączenie z Wi-Fi

Android 10 umożliwia udostępnianie danych logowania do Wi-Fi za pomocą Łatwego połączenia na urządzeniu równorzędnym w zastępstwie wycofanego protokołu 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 w artykule Łatwe połączenie z Wi-Fi.

Interfejs API połączenia Wi-Fi Direct

Do klas interfejsu API WifiP2pConfig i WifiP2pManager w Androidzie 10 zostały wprowadzone aktualizacje, które umożliwiają szybkie nawiązywanie połączeń z Wi-Fi Direct przy użyciu wstępnie zdefiniowanych informacji. Informacje te są udostępniane przez kanał boczny, np. Bluetooth lub NFC.

Poniższy przykładowy kod pokazuje, jak utworzyć grupę przy użyciu wstępnie zdefiniowanych 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:

Kotlin

manager.connect(channel, config, null)

Java

manager.connect(channel, config, null);

Kanały ukierunkowane na połączenie Bluetooth LE (CoC)

Android 10 umożliwia aplikacji korzystanie z połączeń BLE, aby przesyłać większe strumienie danych między 2 urządzeniami BLE. Ten interfejs wyodrębnia mechanikę Bluetootha i połączenia, co ułatwia implementację.

Funkcje telefoniczne

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

Lepsza jakość połączeń

Android 10 umożliwia zbieranie informacji o jakości trwających połączeń z podsystemem multimedialnym IP (IMS), w tym o jakości do i z sieci na urządzeniach obsługujących tę funkcję.

Filtrowanie połączeń i identyfikacja rozmówcy

Android 10 umożliwia aplikacji identyfikowanie połączeń spoza książki adresowej użytkownika jako potencjalne połączenia spamowe i wyciszanie ich odrzucania w imieniu użytkownika. Informacje o tych zablokowanych połączeniach są rejestrowane w rejestrze połączeń jako zablokowane, aby zapewnić użytkownikowi większą przejrzystość w przypadku nieodebranych połączeń. Dzięki temu interfejsowi API nie trzeba uzyskiwać od użytkownika uprawnień READ_CALL_LOG na potrzeby filtrowania połączeń i identyfikowania rozmówcy.

Interfejs API usługi przekierowania 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 CallRedirectionService API udostępnia interfejsy, które umożliwiają modyfikowanie wywołań wychodzących przez platformę Androida. Na przykład aplikacje innych firm mogą anulować połączenia i przekierowywać je przez VoIP.

Ulepszenia tworzenia plików w pamięci zewnętrznej

Oprócz wprowadzenia miejsca na dane o określonym zakresie Android 10 udostępnia te funkcje związane z pamięcią zewnętrzną:

  • Możesz użyć flagi IS_PENDING, aby przyznać aplikacji wyłączny dostęp do pliku multimedialnego zapisanego na dysku.
  • Jeśli znasz konkretną lokalizację, w której mają być przechowywane pliki, możesz podać dla systemu wskazówkę, gdzie mają być przechowywane 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 umożliwia też 2 aplikacje jednoczesne udostępnianie wejścia audio. Więcej informacji znajdziesz w sekcji Udostępnianie wejścia audio.

Przechwytywanie odtwarzania dźwięku

Android 10 umożliwia aplikacji nagrywanie dźwięku z innych aplikacji. Wszystkie informacje znajdziesz w sekcji Nagrywanie odtwarzania.

Pasek przewijania w powiadomieniach MediaStyle

Od Androida 10 w powiadomieniach z aplikacji MediaStyle wyświetla się pasek przewijania. Pasek przewijania pokazuje postęp odtwarzania z elementu PlaybackState.getPosition(). W niektórych przypadkach można go użyć do wyszukania lokalizacji w programie odtwarzania. Wygląd i działanie paska przewijania zależą od tych reguł:

  • Pasek przewijania pojawia się, gdy aktywny jest MediaSession, a jego czas trwania (określony przez MediaMetadata.METADATA_KEY_DURATION) jest dłuższy niż 0. Oznacza to, że pasek nie wyświetla się w przypadku nieokreślonych transmisji, takich jak transmisje na żywo i transmisje radiowe.
  • Jeśli sesja używa języka ACTION_SEEK_TO, użytkownik może przeciągnąć pasek przewijania, aby sterować miejscem odtwarzania.

Natywny interfejs API MIDI

Natywny interfejs MIDI API (AMidi) na Androidzie umożliwia deweloperom aplikacji wysyłanie i odbieranie danych MIDI za pomocą kodu C/C++, ściślej integrując się z logiką dźwięku i sterowania C/C++ C/C++ i minimalizując potrzebę korzystania z JNI.

Więcej informacji znajdziesz w artykule Natywny interfejs API MIDI na Androida.

Ulepszenia MediaCodecInfo

Android 10 dodaje do MediaCodecInfo metody, które ujawniają więcej informacji o kodeku.

Więcej informacji znajdziesz w artykule Kodeki multimediów.

Thermal API

Gdy urządzenia za bardzo się nagrzewają, mogą ograniczać procesor lub GPU, co może w nieoczekiwany sposób wpłynąć na działanie aplikacji i gier. W aplikacjach, które wykorzystują skomplikowaną grafikę, moc obliczeniową lub długotrwałą aktywność w sieci, łatwiej jest napotkać błędy. Te urządzenia mogą różnić się w zależności od chipsetu i częstotliwości podstawowych, poziomu integracji, a także opakowania i formatu urządzenia.

W Androidzie 10 aplikacje i gry mogą korzystać z interfejsu The term API do monitorowania zmian na urządzeniu i podejmowania działań w celu utrzymania mniejszego zużycia energii w celu przywrócenia normalnej temperatury. Aplikacje rejestrują odbiornik w usłudze PowerManager, za pomocą której system zgłasza ciągły stan cieplna – od lekkiego i umiarkowanego do ciężkiego, krytycznego, awaryjnego oraz wyłączenia.

Kiedy urządzenie zgłasza stres termiczny, aplikacje i gry mogą pomóc, wycofując się z ciągłych ćwiczeń i na różne sposoby zmniejszając zużycie energii. Na przykład aplikacje do strumieniowego przesyłania danych mogą zmniejszyć rozdzielczość lub szybkość transmisji bitów albo natężenie ruchu sieciowego, aplikacja aparatu może wyłączyć lampę błyskową lub intensywne ulepszanie obrazu, gra może zmniejszyć liczbę klatek lub wielokąt, aplikacja do multimediów może zmniejszyć głośność głośników, a aplikacja z mapami – wyłączyć GPS.

Termin API wymaga nowej warstwy HAL urządzenia. Jest ona obecnie obsługiwana na urządzeniach Pixel z Androidem 10. Współpracujemy z partnerami z producentami urządzeń, aby jak najszybciej wprowadzić szerokie wsparcie ekosystemu.

Aparat i zdjęcia

Android 10 wprowadza te nowe funkcje związane z aparatem i obrazami:

Obsługa aparatów monochromatycznych

W Androidzie 9 (poziom interfejsu API 28) po raz pierwszy wprowadziliśmy możliwość korzystania z aparatu monochromatycznego. Android 10 wprowadza kilka ulepszeń do obsługi aparatu monochromatycznego:

  • Obsługa formatu strumienia Y8 w celu zwiększenia wydajności pamięci.
  • Obsługa monochromatycznego przechwytywania nieprzetworzonych plików DNG.
  • Wprowadzenie wyliczeń MONO i NIR CFA w celu rozróżnienia między zwykłymi kamerami monochromatycznymi a kamerami na podczerwień.

Dzięki tej funkcji możesz przechwycić natywny obraz monochromatyczny. Logiczne urządzenie z wieloma kamerami może wykorzystać kamerę monochromatyczną jako kamerę podrzędną, aby uzyskać lepszą jakość obrazu w słabym oświetleniu.

Dynamiczny format głębi

Począwszy od Androida 10 aparaty mogą przechowywać dane o głębi zdjęcia w osobnym pliku, korzystając z nowego schematu o nazwie DDF (Dynamic Depth Format). Aplikacje mogą prosić o zastosowanie zarówno obrazu JPG, jak i jego metadanych głębi, wykorzystując te informacje do zastosowania dowolnego rozmycia bez modyfikowania oryginalnych danych obrazu.

Specyfikację tego formatu znajdziesz w sekcji Dynamiczny format głębi.

Plik obrazu o wysokiej wydajności

High Efficiency Image File (HEIF) to standardowy format pliku graficznego i wideo, który ma wyższą jakość kodowania i ma mniejszy rozmiar w porównaniu z innymi formatami plików.

Więcej informacji o formacie pliku znajdziesz w sekcji HEIC.

Ulepszenia trybu wielokamerowego

Android 10 ulepsza połączenie kilku aparatów w 1 aparat logiczny – funkcja wprowadzona w Androidzie 9 (poziom interfejsu API 28). Do interfejsu Camera2 API zostały dodane te elementy:

Interfejs Accessibility Services API

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

Flaga klucza wejścia AccessibilityNodeInfo

Od Androida 10 możesz wywoływać metodę isTextEntryKey(), aby określić, czy dany AccessibilityNodeInfo to klawisz do wprowadzania tekstu, który jest częścią klawiatury lub klawiatury.

Komunikaty głosowe w oknie ułatwień dostępu

Jeśli użytkownicy muszą użyć skrótu ułatwień dostępu, aby uruchomić usługę ułatwień dostępu, w Androidzie 10 okno dialogowe może towarzyszyć komunikat zamiany tekstu na mowę.

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

Gdy w Androidzie 10 włączona jest funkcja nawigacji przy użyciu gestów, przycisk ułatwień dostępu nie jest widoczny ani nie można go wybrać. Aby otworzyć 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 do klawiatur fizycznych

Na Androidzie 10 użytkownicy mogą aktywować skrót ułatwień dostępu na klawiaturze fizycznej, naciskając Control + Alt + Z.

Ulepszenie kontrolera klawiatury programowej

W Androidzie 10 usługi ułatwień dostępu mogą prosić o wyświetlenie klawiatury programowej, nawet 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 zapewnia obsługę limitów czasu zdefiniowanych przez użytkownika dla interaktywnych i nieinteraktywnych elementów interfejsu. Na wartość zwracaną mają wpływ zarówno ustawienia użytkownika, jak i interfejsy API usługi ułatwień dostępu.

Ulepszenia autouzupełniania

Android 10 zawiera opisane poniżej ulepszenia w usłudze autouzupełniania.

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

Flaga FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST pozwala określić, czy żądanie autouzupełniania zostało wygenerowane w trybie zgodności.

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

Możesz poinformować zespół pomocy, w których aplikacja używa wielu aktywności do wyświetlania nazwy użytkownika, hasła i innych pól. W tym celu użyj flagi SaveInfo.FLAG_DELAY_SAVE.

Interakcja użytkownika z interfejsem zapisu

Możesz pokazać lub ukryć pole hasła w oknie zapisywania, ustawiając odbiornik działań w tym oknie i zmieniając widoczność odpowiedniego hasła zdalnego.

Obsługa aktualizowania zbiorów danych

Autouzupełnianie może aktualizować istniejące hasła. Jeśli na przykład użytkownik zapisał już hasło i zapisał nowe, autouzupełnianie poprosi go o zaktualizowanie istniejącego hasła zamiast zapisywania nowego.

Udoskonalenia klasyfikacji pól

Android 10 zawiera opisane poniżej 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

Podczas korzystania z UserData.Builder w Androidzie 10 możesz teraz zmapować wartość na wiele typów identyfikatorów kategorii. We wcześniejszych wersjach deweloper zgłaszał wyjątek, 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 aplikacji

Android 10 dodaje funkcję FillResponse.setUserData(), która umożliwia ustawianie danych użytkownika z konkretnej aplikacji na czas trwania sesji. Pomoże to usłudze autouzupełniania w wykrywaniu typów pól z treścią specyficzną dla aplikacji.

Elementy sterujące interfejsu użytkownika i systemu

Android 10 zawiera te ulepszenia interfejsu:

Obsługuj limity JVMTI PopFrame

Android 10 dodaje obsługę funkcji can_pop_frames w implementacji JVMTI Androida. Podczas debugowania funkcja ta umożliwia ponowne uruchamianie funkcji po wstrzymaniu w punkcie przerwania i dostosowywaniu wartości lokalnych, globalnych lub implementacji funkcji. Więcej informacji znajdziesz na stronie z informacjami o Pop Frame dostępnej w Oracle.

Interfejs API kontroli przestrzeni

Android 10 zapewnia interfejs API SurfaceControl zapewniający niskopoziomowy dostęp do kompozytora systemu (SurfaceFlinger). Dla większości użytkowników SurfaceView jest prawidłowym sposobem na wykorzystanie kompozytora. Interfejs SurfaceControl API może być przydatny w niektórych przypadkach, na przykład:

  • Synchronizacja wielu platform
  • Osadzanie na różnych powierzchniach
  • Zarządzanie od początku działania 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. Jest to rozwiązanie alternatywne dla użytkowników, na których wystąpiły ograniczenia BufferQueue.

Wykrywanie zawieszonego mechanizmu renderowania WebView

Android 10 wprowadza klasę abstrakcyjną WebViewRenderProcessClient, za pomocą której aplikacje mogą wykrywać, czy WebView przestał reagować. 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łuje metodę onRenderProcessUnresponsive() klienta, przekazując WebView i WebViewRenderProcess. (Jeśli WebView dotyczy pojedynczego procesu, parametr WebViewRenderProcess ma wartość null). Aplikacja może wykonać odpowiednie działanie, np. wyświetlić użytkownikowi okno dialogowe z pytaniem, czy chce zatrzymać proces renderowania.

Jeśli WebView pozostaje bez odpowiedzi, system co jakiś czas wywołuje metodę onRenderProcessUnresponsive() (nie częściej niż co 5 sekund), ale nie podejmuje żadnych innych działań. Jeśli WebView ponownie zacznie odpowiadać, system wywoła metodę onRenderProcessResponsive() tylko raz.

Panele ustawień

W Androidzie 10 wprowadziliśmy panele ustawień, interfejs API, który umożliwia aplikacjom pokazywanie użytkownikom ustawień w kontekście ich samej aplikacji. Dzięki temu nie muszą oni otwierać Ustawień, aby zmienić opcje takie jak NFC czy mobilna transmisja danych, aby móc 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ę, gdy urządzenie jest w trybie samolotowym. Wcześniej w Androidzie 10 aplikacja mogła wyświetlać tylko ogólny komunikat z prośbą o otworzenie Ustawień w celu przywrócenia połączenia. Na Androidzie 10 aplikacja przeglądarki może wyświetlać wbudowany panel z najważniejszymi ustawieniami łączności, takimi jak tryb samolotowy, Wi-Fi (w tym sieci w pobliżu) i mobilna transmisja danych. Dzięki temu panelowi użytkownicy mogą przywrócić połączenie bez opuszczania aplikacji.

Aby wyświetlić panel ustawień, uruchom intencję za pomocą jednego 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 mieć jedną z tych wartości:

ACTION_INTERNET_CONNECTIVITY
Wyświetla ustawienia związane z połączeniem z internetem, np. tryb samolotowy, Wi-Fi i mobilną transmisję danych.
ACTION_WIFI
Pokazuje 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 ilości danych.
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 oferuje szereg ulepszeń związanych z udostępnianiem:

Udostępnianie skrótów API

Interfejs Sharing Skróty API zastępuje interfejsy API do udostępniania bezpośredniego.

Zamiast pobierać wyniki reaktywnie na żądanie, interfejs Share Overviews API umożliwia aplikacjom publikowanie celów udostępniania bezpośredniego z wyprzedzeniem. Tak działa ShortcutManager. Ponieważ te 2 interfejsy API są podobne, rozszerzyliśmy interfejs API ShortcutInfo, aby ułatwić korzystanie z nich. Dzięki interfejsowi udostępniania Skrótów API możesz bezpośrednio przypisywać kategorie lub osoby do celów udostępniania. Cele udziału pozostają zachowane w systemie, dopóki ta sama aplikacja ich nie zaktualizuje lub dopóki aplikacja nie zostanie odinstalowana.

Starszy mechanizm udostępniania bezpośredniego nadal działa, ale aplikacje, które z niego korzystają, mają niższy priorytet niż aplikacje korzystające z interfejsu Udostępnianie skrótów API.

ShortcutInfo.Builder dodaje i ulepsza metody dostarczania dodatkowych informacji o celu udostępniania.

cele w ramach udostępniania bezpośredniego,

Możesz opublikować skrót dynamiczny jako cel udostępniania bezpośredniego. Przeczytaj artykuł Publikowanie celów udostępniania bezpośredniego.

ShortcutManagerCompat to nowy interfejs API AndroidX zapewniający zgodność wsteczną ze starym interfejsem DirectShare API. Jest to preferowany sposób publikowania celów udziału.

Podgląd tekstu

Gdy aplikacja udostępnia treść tekstową, może wyświetlać opcjonalny podgląd treści w interfejsie Sharesheet.

Zapoznaj się z artykułem Dodawanie podglądu tekstu sformatowanego.

Więcej informacji

Więcej informacji o tym, jak aplikacje mogą udostępniać dane, znajdziesz w sekcjach Wysyłanie prostych danych do innych aplikacji i Odbieranie prostych danych z innych aplikacji.

Ciemny motyw

Android 10 oferuje ciemny motyw, który obejmuje zarówno interfejs systemu Android, jak i aplikacje działające na urządzeniu. Więcej informacji znajdziesz w artykule Ciemny motyw.

Rodzaje usług działających na pierwszym planie

Android 10 wprowadza atrybut pliku manifestu foregroundServiceType, który jest zawarty w definicji kilku konkretnych usług. Czasami możliwe jest przypisanie do konkretnej usługi wielu typów usług na pierwszym planie, chociaż jest to rzadko używane.

W tabeli poniżej znajdziesz różne typy usług na pierwszym planie i usługi, w których przypadku można zadeklarować konkretny typ:

Typ usługi na pierwszym planie Przykład zastosowania usługi, która powinna zadeklarować ten typ
connectedDevice Monitorowanie aktywności fizycznej w urządzeniach do noszenia
dataSync Pobieranie plików z sieci
location Kontynuowanie działania inicjowanego przez użytkownika
mediaPlayback Odtwarzanie audiobooka, podcastu lub muzyki
mediaProjection Nagrywaj przez krótki czas film przedstawiający wyświetlacz urządzenia
phoneCall Obsługuj trwającą rozmowę telefoniczną

Kotlin

Android 10 zawiera te aktualizacje dla deweloperów aplikacji Kotlin.

Adnotacje z wartością null dla interfejsów API biblioteki libcore

Android 10 zwiększa zasięg adnotacji o wartości null w pakiecie SDK dla interfejsów libcore API. Dzięki tym adnotacjom deweloperzy aplikacji, którzy przeprowadzają w Android Studio analizę wartości null (Kotlin lub Java), mogą otrzymywać informacje o braku wartości podczas interakcji z tymi interfejsami API.

Zwykle w kotlinach naruszenia umów z możliwością nullowania prowadzą do błędów kompilacji. Aby zapewnić zgodność z dotychczasowym kodem, dodawane są tylko adnotacje @RecentlyNullable i @RecentlyNonNull. Oznacza to, że naruszenia wartości null kończą się ostrzeżeniami, a nie błędami.

Poza tym wszelkie adnotacje @RecentlyNullable i @RecentlyNonNull dodane na Androidzie 9 zostaną zmienione odpowiednio na @Nullable i @NonNull. Oznacza to, że w Androidzie 10 i nowszych naruszenia związane z wartością null prowadzą do błędów, a nie ostrzeżeń.

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

Zestaw NDK

W Androidzie 10 wprowadziliśmy opisane poniżej zmiany w pakiecie NDK.

Ulepszone debugowanie własności deskryptora plików

W Androidzie 10 dodaliśmy usługę fdsan, która ułatwia znajdowanie i rozwiązywanie problemów z własnością deskryptorów plików.

Błędy związane z niewłaściwym postępowaniem z własnością deskryptora pliku, które zwykle mają postać use-after-close i Double-close, są analogiczne do błędów use-after-free i Double-free, ale ich zdiagnozowanie i naprawienie jest zwykle znacznie trudniejsze. fdsan próbuje wykryć nieprawidłowe zarządzanie deskryptorem pliku i zapobiegać mu przez egzekwowanie deskryptora 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 Googlesource poświęconej fdsan.

TLS ELF

Aplikacje utworzone za pomocą NDK z minimalnym poziomem API 29 mogą korzystać z protokołu TLS ELF zamiast emutls. Dodaliśmy obsługę dynamicznego i statycznego tagu łączącego w celu obsługi tej metody obsługi zmiennych lokalnych wątków.

W przypadku aplikacji utworzonych na poziomie API 28 lub niższym wdrożyliśmy ulepszenia dotyczące libgcc/compiler-rt, aby rozwiązać niektóre problemy z emutls.

Więcej informacji znajdziesz w artykule Zmiany w Androidzie dla deweloperów pakietów NDK.

Środowisko wykonawcze

W Androidzie 10 wprowadziliśmy tę zmianę środowiska wykonawczego.

Aktywator czyszczenia pamięci oparty na Mallinfo

Gdy małe obiekty Java platformy odwołują się do wielkich obiektów na stercie C++, często obiekty C++ można odzyskać dopiero po zebraniu obiektu Java i sfinalizowaniu. W poprzednich wersjach platforma szacowała rozmiary wielu obiektów C++ powiązanych z obiektami Java. Oszacowanie nie zawsze było dokładne i niekiedy prowadziło do znacznego zwiększenia wykorzystania pamięci, ponieważ platforma nie usuwała pamięci, gdy powinna.

W Androidzie 10 moduł zbierania odpadów śledzi całkowity rozmiar sterty przydzielonej przez system malloc(), dzięki czemu duże przydziały malloc() są zawsze uwzględniane w obliczeniach wywoływanych przez GC. W rezultacie aplikacje, które przeplatają dużą liczbę alokacji C++ z wykonaniem w języku Java, mogą zauważyć wzrost częstotliwości czyszczenia pamięci. W przypadku innych aplikacji ten spadek może być niewielki.

Testowanie i debugowanie

Android 10 zawiera te ulepszenia związane z testowaniem i debugowaniem.

Ulepszenia śledzenia systemu na urządzeniu

Od Androida 10 możesz określić limity rozmiaru i czasu trwania logu czasu podczas wykonywania śledzenia systemu na urządzeniu. Gdy podasz jedną z tych wartości, system przeprowadzi długi ślad, okresowo kopiując bufor śledzenia do pliku docelowego w trakcie rejestrowania logu czasu. Śledzenie kończy się po osiągnięciu określonych limitów rozmiaru lub czasu trwania.

Wykorzystaj te dodatkowe parametry, aby przetestować inne przypadki użycia niż w przypadku standardowego śledzenia. Możesz na przykład zdiagnozować błąd związany z wydajnością, który występuje dopiero po długim czasie działania aplikacji. W takim przypadku możesz zarejestrować długi ślad z całego dnia, a następnie przeanalizować algorytm szeregowania procesora, aktywność dysku, wątki aplikacji i inne dane w raporcie, aby pomóc w określeniu przyczyny błędu.

W Androidzie 10 i nowszych pliki śledzenia są zapisywane w formacie, który można otwierać w Perfetto – projekcie open source do instrumentacji i śledzenia wydajności. Pliki śledzenia Perfetto możesz przekonwertować na format Systrace.

Ulepszenia TextClassifier

Android 10 udostępnia dodatkową funkcję klasyfikacji tekstu w interfejsie TextClassifier.

Wykrywanie języka

Metoda detectLanguage() działa podobnie do dotychczasowych metod klasyfikacji. Otrzymuje obiekt TextLanguage.Request i zwraca obiekt TextLanguage.

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

Sugerowane działania dotyczące rozmowy

Metoda suggestConversationActions() działa podobnie do dotychczasowych metod klasyfikacji. 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 wskaźnik ufności.

Inteligentne odpowiedzi/działania w powiadomieniach

W Androidzie 9 wprowadzono możliwość wyświetlania sugerowanych odpowiedzi w powiadomieniu. W Androidzie 10 można je rozszerzyć o sugerowane działania oparte na zamiarach. Platforma może też automatycznie generować sugestie. Aplikacje nadal mogą podawać własne sugestie lub zrezygnować z sugestii wygenerowanych przez system.

Interfejs API używany do generowania tych odpowiedzi jest częścią TextClassifier, a programiści mogli go już zobaczyć bezpośrednio na Androidzie 10. Więcej informacji znajdziesz w sekcji poświęconej ulepszeniam TextClassifier.

Jeśli aplikacja zawiera własne sugestie, platforma nie generuje żadnych automatycznych sugestii. Jeśli nie chcesz, aby w powiadomieniach aplikacji były wyświetlane sugerowane odpowiedzi lub działania, możesz zrezygnować z odpowiedzi i działań generowanych przez system za pomocą przycisków setAllowGeneratedReplies() i setAllowSystemGeneratedContextualActions().