Funkcje i interfejsy API Androida 10

Android 10 wprowadza wiele przydatnych funkcji i możliwości dla użytkowników i deweloperów. W tym dokumencie opisujemy, co jest dostępne dla deweloperów.

Więcej informacji o interfejsach API znajdziesz w raporcie o różnicach w interfejsach API lub w dokumentacji interfejsu Android API. Wyszukaj interfejsy API, które zostały „dodane na poziomie 29 interfejsu API”. Zapoznaj się też ze zmianami w działaniu Androida 10 (w przypadku aplikacji kierowanych na poziom 29 interfejsu APIwszystkich aplikacji) oraz ze zmianami dotyczącymi 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 podsumowane w sekcjach poniżej.

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 umożliwia użytkownikowi uwierzytelnianie za pomocą kodu PIN, wzoru lub hasła urządzenia, jeśli nie może on uwierzytelnić się za pomocą danych biometrycznych.
  • Wskazówka, która informuje system, że po uwierzytelnieniu użytkownika za pomocą niejawnej metody biometrycznej nie trzeba wymagać od niego potwierdzenia. Możesz na przykład poinformować system, że po uwierzytelnieniu użytkownika za pomocą uwierzytelniania twarzą nie jest wymagane dalsze potwierdzenie.

Uruchamianie osadzonego kodu DEX bezpośrednio z pliku APK

Od Androida 10 możesz nakazać platformie uruchamianie osadzonego kodu DEX bezpośrednio z pliku APK aplikacji. Ta opcja może pomóc w zapobieganiu atakom, jeśli osoba przeprowadzająca atak zdoła zmodyfikować skompilowany lokalnie kod na urządzeniu.

Więcej informacji znajdziesz w artykule Bezpośrednie uruchamianie osadzonego kodu DEX z pliku APK.

Obsługa TLS 1.3

Android 10 dodaje obsługę protokołu TLS 1.3. TLS 1.3 to ważna zmiana w standardzie TLS, która zapewnia większą wydajność i lepsze zabezpieczenia. Z naszych testów porównawczych wynika, że bezpieczne połączenia można nawiązywać nawet o 40% szybciej w przypadku protokołu TLS 1.3 niż w przypadku protokołu TLS 1.2.

Więcej informacji o naszej implementacji protokołu TLS 1.3 znajdziesz w sekcji TLS na stronie dotyczącej zmian w działaniu wszystkich aplikacji.

Publiczny interfejs API Conscrypt

Od Androida 10 dostawca zabezpieczeń Conscrypt zawiera publiczny interfejs API funkcji TLS.

Zbiór klas w android.net.ssl zawiera statyczne metody dostępu do funkcji, które nie są dostę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, który działa na instancjach 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 łącznością.

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

Android 10 dodaje obsługę połączeń peer-to-peer. Ta funkcja umożliwia aplikacji wyświetlanie użytkownikowi prośby o zmianę punktu dostępu, z którym połączone jest urządzenie, za pomocą elementu WifiNetworkSpecifier do opisywania właściwości żądanej sieci. Połączenie peer-to-peer jest używane do celów niezwiązanych z zapewnianiem dostępu do sieci, takich jak konfiguracja urządzeń dodatkowych, np. Chromecasta i sprzętu Google Home.

Więcej informacji znajdziesz w artykule Wi-Fi Network Request API for peer-to-peer connectivity (Interfejs Wi-Fi Network Request API do połączeń peer-to-peer).

Interfejs API sugestii sieci Wi-Fi

Android 10 umożliwia aplikacji wyświetlanie prośby o połączenie z punktem dostępu Wi-Fi. Możesz podać sugestie dotyczące sieci, z którą należy się połączyć. Platforma ostatecznie wybierze punkt dostępu na podstawie danych wejściowych z Twojej i innych aplikacji.

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

Ulepszenia trybów wysokiej wydajności i niskich opóźnień Wi-Fi

Android 10 umożliwia przekazywanie do modemu wskazówki, która pozwala zminimalizować opóźnienie.

Android 10 rozszerza interfejs Wi-Fi Lock API, aby skutecznie obsługiwać tryb wysokiej wydajności i tryb niskiego opóźnienia. Oszczędzanie energii Wi-Fi jest wyłączone w trybie wysokiej wydajności i niskiego opóźnienia, a w trybie niskiego opóźnienia można włączyć dalszą optymalizację opóźnienia w zależności od obsługi modemu.

Tryb niskiego opóźnienia jest włączony tylko wtedy, gdy aplikacja uzyskująca 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 resolverze DNS

Android 10 dodaje natywną obsługę specjalistycznych wyszukiwań DNS przy użyciu zarówno wyszukiwań w postaci zwykłego tekstu, jak i trybu DNS-over-TLS. Wcześniej platformowy resolver DNS obsługiwał tylko rekordy A i AAAA, które umożliwiają wyszukiwanie tylko adresów IP powiązanych z nazwą, ale nie obsługiwał żadnych innych typów rekordów. Interfejs DnsResolver API zapewnia ogólne, asynchroniczne rozwiązywanie problemów, umożliwiając wyszukiwanie rekordów SRV, NAPTR i innych typów. Pamiętaj, że analiza odpowiedzi należy do aplikacji.

W przypadku aplikacji opartych na NDK zobacz android_res_nsend.

Wi-Fi Easy Connect

Android 10 umożliwia używanie funkcji Easy Connect do udostępniania danych logowania do sieci Wi-Fi na urządzeniu równorzędnym. Zastępuje ona WPS, która została wycofana. Aplikacje mogą zintegrować Easy Connect z procesem konfiguracji i wdrażania, używając intencji ACTION_PROCESS_WIFI_EASY_CONNECT_URI.

Więcej informacji o tej funkcji znajdziesz w artykule Wi-Fi Easy Connect.

Interfejs API połączenia Wi-Fi Direct

W Androidzie 10 zaktualizowaliśmy klasy interfejsów API WifiP2pConfigWifiP2pManager, aby obsługiwały szybkie nawiązywanie połączeń z Wi-Fi Direct przy użyciu wstępnie określonych informacji. Te informacje są udostępniane za pomocą kanału bocznego, np. Bluetootha 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 za pomocą danych logowania, zastąp symbol manager.createGroup() tymi elementami:

Kotlin

manager.connect(channel, config, null)

Java

manager.connect(channel, config, null);

Bluetooth LE Connection Oriented Channels (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 upraszcza implementację, ponieważ ukrywa szczegóły dotyczące Bluetootha i mechanizmów łączności.

Funkcje połączeń telefonicznych

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

Ulepszenia jakości połączeń

Android 10 umożliwia zbieranie informacji o jakości trwających połączeń w systemie IMS (IP Multimedia Subsystem), w tym o jakości połączenia z siecią i do niej, na urządzeniach, które obsługują tę funkcję.

Filtrowanie połączeń i identyfikacja rozmówcy

Android 10 umożliwia aplikacji identyfikowanie połączeń, których nie ma w książce adresowej użytkownika, jako potencjalnych połączeń spamowych, a także automatyczne odrzucanie 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 nieodebranych połączeń. Korzystanie z tego interfejsu API eliminuje konieczność uzyskiwania od użytkownika uprawnień READ_CALL_LOG do udostępniania funkcji filtrowania połączeń i identyfikacji dzwoniącego.

Interfejs API usługi przekierowywania połączeń

Android 10 zmienia sposób obsługi intencji połączeń. NEW_OUTGOING_CALL został wycofany i zastąpiony interfejsem API CallRedirectionService. Interfejs API CallRedirectionService udostępnia interfejsy, które umożliwiają modyfikowanie połączeń wychodzących wykonywanych przez platformę Android. Na przykład aplikacje innych firm mogą anulować połączenia i przekierowywać je przez VoIP.

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

Oprócz wprowadzenia ograniczonego dostępu do miejsca na dane Android 10 dodaje 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 podczas zapisywania go na dysku.
  • Jeśli wiesz, gdzie powinny być przechowywane pliki, możesz dać systemowi wskazówkę, gdzie zapisywać nowo utworzone pliki.
  • Każde zewnętrzne urządzenie do przechowywania danych ma unikalną nazwę woluminu.

Multimedia i grafika

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

Udostępnianie wejścia audio

Android 10 umożliwia jednoczesne korzystanie z wejścia audio przez 2 aplikacje. Więcej informacji znajdziesz w artykule Udostępnianie wejścia audio.

Przechwytywanie odtwarzania dźwięku

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

Pasek w powiadomieniach w stylu multimediów

Od Androida 10 MediaStyle powiadomienia zawierają pasek przewijania. Suwak pokazuje postęp odtwarzania od PlaybackState.getPosition(). W niektórych przypadkach można go użyć do przewinięcia odtwarzanego programu do wybranego miejsca. Wygląd i działanie paska przewijania są kontrolowane 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 niż zero. Oznacza to, że pasek nie pojawia się w przypadku strumieni o nieokreślonym czasie trwania, takich jak transmisje na żywo i audycje radiowe.
  • Jeśli sesja implementuje ACTION_SEEK_TO, użytkownik może przeciągnąć pasek przewijania, aby kontrolować miejsce odtwarzania.

Native MIDI API

Interfejs Android Native MIDI API (AMidi) umożliwia programistom aplikacji wysyłanie i odbieranie danych MIDI za pomocą kodu C/C++, co pozwala na ściślejszą integrację z logiką audio/sterowania w C/C++ i minimalizuje potrzebę korzystania z JNI.

Więcej informacji znajdziesz w artykule Android Native MIDI API.

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ę nagrzeją, mogą ograniczyć działanie procesora lub karty graficznej, co może mieć nieoczekiwany wpływ na aplikacje i gry. Aplikacje korzystające ze złożonej grafiki, wymagające dużej mocy obliczeniowej lub ciągłej aktywności sieciowej są bardziej podatne na problemy, które mogą się różnić w zależności od urządzenia, chipsetu i częstotliwości rdzeni, 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 mające na celu zmniejszenie zużycia energii i przywrócenie normalnej temperatury. Aplikacje rejestrują odbiornikPowerManager, za pomocą którego system zgłasza bieżący stan termiczny w zakresie od lekkiego i umiarkowanego po poważny, krytyczny, awaryjny i wyłączenie.

Gdy urządzenie zgłosi stres termiczny, aplikacje i gry mogą pomóc, wycofując się z bieżących działań, aby zmniejszyć zużycie energii na różne sposoby. Na przykład aplikacje do streamingu mogą obniżyć 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 na sekundę lub teselację wielokątów, aplikacja multimedialna może zmniejszyć głośność głośnika, a aplikacja map może wyłączyć GPS.

Interfejs API termiczny wymaga nowej warstwy HAL urządzenia. Jest obecnie obsługiwany na urządzeniach Pixel z Androidem 10. Współpracujemy z producentami urządzeń, aby jak najszybciej wprowadzić szeroką obsługę w ekosystemie.

Aparat i zdjęcia

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

Obsługa kamery monochromatycznej

W Androidzie 9 (poziom 28 interfejsu API) po raz pierwszy wprowadzono możliwość korzystania z aparatu monochromatycznego. Android 10 wprowadza kilka ulepszeń w zakresie obsługi aparatów monochromatycznych:

  • Obsługa formatu strumienia Y8 w celu zwiększenia wydajności pamięci.
  • Obsługa monochromatycznego zapisu w formacie DNG.
  • Wprowadzenie wyliczeń MONO i NIR CFA w celu odróżnienia zwykłego aparatu monochromatycznego od aparatu na podczerwień.

Możesz użyć tej funkcji, aby zrobić czarno-białe zdjęcie. Urządzenie logiczne z wieloma aparatami może używać aparatu monochromatycznego jako fizycznego aparatu dodatkowego, aby uzyskać lepszą jakość obrazu przy słabym oświetleniu.

Format dynamicznej głębi

Od Androida 10 aparaty mogą przechowywać dane o głębi obrazu w osobnym pliku, korzystając z nowego schematu o nazwie Dynamic Depth Format (DDF). Aplikacje mogą żądać zarówno obrazu JPG, jak i jego metadanych głębi, aby wykorzystać te informacje do zastosowania dowolnego rozmycia w postprodukcji bez modyfikowania oryginalnych danych obrazu.

Specyfikację tego formatu znajdziesz w artykule Dynamic Depth Format (w języku angielskim).

Format pliku obrazu o wysokiej wydajności

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

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

Ulepszenia w zakresie wielu aparatów

Android 10 ulepsza łączenie wielu aparatów w jeden aparat logiczny, czyli funkcję wprowadzoną w Androidzie 9 (poziom 28 interfejsu API). Do interfejsu Camera2 API dodano te funkcje:

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 wpisu AccessibilityNodeInfo

Od Androida 10 możesz wywołać funkcję isTextEntryKey() , aby sprawdzić, czy dany AccessibilityNodeInfo reprezentuje klawisz wprowadzania tekstu na klawiaturze.

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, Android 10 umożliwia wyświetlanie okna z odpowiednim komunikatem tekstowym, jeśli usługa tego wymaga.

Skrót ułatwień dostępu, gdy włączona jest nawigacja gestami

Gdy w Androidzie 10 włączona jest funkcja nawigacja gestami, przycisk ułatwień dostępu jest niewidoczny i 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 na klawiaturze fizycznej

W Androidzie 10 użytkownicy mogą wywołać 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ą żądać wyświetlania klawiatury ekranowej nawet wtedy, gdy urządzenie wykryje podłączoną klawiaturę fizyczną. Użytkownicy mogą zastąpić to działanie.

Limity czasu ułatwień dostępu zdefiniowane przez użytkownika

W Androidzie 10 wprowadziliśmy interfejs API getRecommendedTimeoutMillis(). Ta metoda obsługuje zdefiniowane przez użytkownika limity czasu dla interaktywnych i nieinteraktywnych elementów interfejsu. Na wartość zwracaną mają wpływ 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 autouzupełniania związane ze zgodnością

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

Zapisywanie nazwy użytkownika i hasła jednocześnie

Możesz obsługiwać przypadki, w których 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 zapisywania

Możesz wyświetlać i ukrywać pole hasła w oknie zapisu, ustawiając odbiornik działania w oknie 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 zapisze nowe, Autouzupełnianie poprosi go o zaktualizowanie dotychczasowego hasła zamiast zapisywania nowego.

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 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, jeśli wartość została dodana więcej niż raz, zgłaszany był wyjątek.

Ulepszona obsługa numerów kart kredytowych

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

Obsługa klasyfikacji pól w przypadku konkretnych aplikacji

Android 10 dodaje FillResponse.setUserData(), które umożliwia ustawianie danych użytkownika specyficznych dla aplikacji na czas trwania sesji. Pomaga to usłudze autouzupełniania wykrywać typy pól z treściami specyficznymi dla aplikacji.

Interfejs i elementy sterujące systemu

Android 10 wprowadza te ulepszenia interfejsu:

Obsługa możliwości JVMTI PopFrame

W Androidzie 10 dodano obsługę funkcji can_pop_frames w implementacji Androida JVMTI. Podczas debugowania ta funkcja umożliwia ponowne uruchomienie funkcji po wstrzymaniu w punkcie przerwania i dostosowaniu zmiennych lokalnych, globalnych lub implementacji funkcji. Więcej informacji znajdziesz na stronie referencyjnej Oracle dotyczącej wyskakujących ramek.

Surface Control API

Android 10 udostępnia interfejs API SurfaceControl, który umożliwia niski poziom dostępu do kompozytora systemu (SurfaceFlinger). W przypadku większości użytkowników prawidłowym sposobem korzystania z kompozytora jest SurfaceView. Interfejs API SurfaceControl może być przydatny w niektórych przypadkach, na przykład:

  • Synchronizacja na wielu urządzeniach
  • Osadzanie powierzchni w różnych procesach
  • Zarządzanie cyklem życia na niższym poziomie

Interfejs SurfaceControl API jest dostępny w pakiecie SDK i w powiązaniach NDK. Implementacja NDK zawiera interfejs API do ręcznej wymiany buforów z kompozytorem. Jest to alternatywa dla użytkowników, którzy napotkali ograniczenia BufferQueue.

Wykrywanie zawieszonego procesu renderowania WebView

W Androidzie 10 wprowadzono klasę abstrakcyjną WebViewRenderProcessClient WebView, której aplikacje mogą używać do wykrywania, czy usługa przestała odpowiadać. Aby użyć tej klasy:

  1. Zdefiniuj własną podklasę i zaimplementuj jej metody onRenderProcessResponsive() i onRenderProcessUnresponsive().
  2. Dołącz instancję WebViewRenderProcessClient do co najmniej jednego obiektu WebView.
  3. Jeśli WebView przestanie odpowiadać, system wywoła metodę onRenderProcessUnresponsive() klienta, przekazując WebViewWebViewRenderProcess. (Jeśli WebView jest procesem pojedynczym, parametr WebViewRenderProcess ma wartość null). Aplikacja może podjąć odpowiednie działanie, np. wyświetlić okno dialogowe z pytaniem, czy użytkownik chce wstrzymać proces renderowania.

Jeśli WebView nadal nie odpowiada, system okresowo (nie częściej niż raz na 5 sekund) wywołuje onRenderProcessUnresponsive(), ale nie podejmuje żadnych innych działań. Jeśli WebView ponownie zacznie odpowiadać, system wywoła onRenderProcessResponsive() tylko raz.

Panele ustawień

W Androidzie 10 wprowadzono panele ustawień, czyli interfejs API, który umożliwia aplikacjom wyświetlanie użytkownikom ustawień w kontekście aplikacji. Dzięki temu użytkownicy nie muszą przechodzić do Ustawień, aby zmienić takie opcje jak NFC czy dane mobilne w celu korzystania z aplikacji.

Rysunek 1. Użytkownik próbuje otworzyć stronę internetową, gdy urządzenie nie jest połączone z siecią. Chrome wyświetli panel ustawień Połączenie 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ę internetową, gdy urządzenie jest w trybie samolotowym. Przed Androidem 10 aplikacja mogła wyświetlać tylko ogólny komunikat z prośbą o otwarcie Ustawień w celu przywrócenia łączności. W Androidzie 10 aplikacja przeglądarki może wyświetlać panel wbudowany z najważniejszymi ustawieniami łączności, takimi jak tryb samolotowy, Wi-Fi (w tym sieci w pobliżu) i dane mobilne. Na tym panelu użytkownicy mogą przywrócić połączenie bez opuszczania aplikacji.

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

ACTION_INTERNET_CONNECTIVITY
Wyświetla 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 inne ustawienia łączności. Jest to przydatne w przypadku aplikacji, które do przesyłania lub pobierania dużych plików wymagają połączenia Wi-Fi.
ACTION_NFC
Wyświetla wszystkie ustawienia związane z komunikacją Near Field Communication (NFC).
ACTION_VOLUME
Wyświetla ustawienia głośności wszystkich strumieni audio.

Ulepszenia udostępniania

Android 10 wprowadza szereg ulepszeń w zakresie udostępniania:

Sharing Shortcuts API

Interfejs Sharing Shortcuts API zastępuje interfejsy Direct Share API.

Zamiast pobierać wyniki reaktywnie na żądanie, interfejs Sharing Shortcuts API umożliwia aplikacjom publikowanie z wyprzedzeniem bezpośrednich celów udostępniania. Tak działa ShortcutManager. Ponieważ oba interfejsy API są podobne, rozszerzyliśmy ShortcutInfointerfejs API, aby ułatwić korzystanie z obu funkcji. Za pomocą interfejsu Sharing Shortcuts API możesz bezpośrednio przypisywać kategorie lub osoby do miejsca docelowego udostępniania. Obiekty docelowe udostępniania pozostają w systemie, dopóki ta sama aplikacja ich nie zaktualizuje lub nie zostanie odinstalowana.

Starszy mechanizm bezpośredniego udostępniania nadal działa, ale aplikacje, które go używają, mają niższy priorytet niż aplikacje korzystające z interfejsu Sharing Shortcuts API.

ShortcutInfo.Builder dodaje i ulepsza metody, aby dostarczać dodatkowe informacje o docelowym udziale w rynku.

Odbiorcy udostępniania bezpośredniego

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

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.

Wyświetlanie podglądu tekstu

Gdy aplikacja udostępnia treści tekstowe, może wyświetlać opcjonalny podgląd treści w interfejsie arkusza 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 jest stosowany zarówno do interfejsu systemu Android, jak i do 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 manifestu XML foregroundServiceType, który jest uwzględniany w definicji kilku konkretnych usług. Do konkretnej usługi można przypisać kilka typów usług działających na pierwszym planie, choć rzadko jest to odpowiednie.

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

Typ usługi na pierwszym planie Przykładowy przypadek użycia usługi, która powinna zadeklarować ten typ
connectedDevice Monitorowanie trackera fitness
dataSync Pobieranie plików z sieci
location Kontynuowanie działania wywołanego przez użytkownika
mediaPlayback Odtwarzanie audiobooka, podcastu lub muzyki
mediaProjection nagrywać ekran urządzenia przez krótki czas.
phoneCall Obsługa trwającego połączenia telefonicznego

Kotlin

Android 10 zawiera te aktualizacje dotyczące programowania w Kotlinie:

Adnotacje dotyczące możliwości przyjmowania wartości null w interfejsach API libcore

Android 10 zwiększa zasięg adnotacji o wartości null w pakiecie SDK interfejsów API libcore. Te adnotacje umożliwiają deweloperom aplikacji, którzy korzystają w Android Studio z analizy dopuszczalności wartości null w języku Kotlin lub Java, uzyskiwanie informacji o dopuszczalności wartości null podczas interakcji z tymi interfejsami API.

Zwykle naruszenia kontraktu dotyczącego wartości null w Kotlinie powodują błędy kompilacji. Aby zapewnić zgodność z dotychczasowym kodem, dodawane są tylko adnotacje @RecentlyNullable@RecentlyNonNull. Oznacza to, że naruszenia dopuszczalności wartości null powodują ostrzeżenia zamiast błędów.

Dodatkowo wszystkie adnotacje @RecentlyNullable lub @RecentlyNonNull dodane w Androidzie 9 zostaną zmienione odpowiednio na @Nullable@NonNull. Oznacza to, że w Androidzie 10 i nowszych wersjach naruszenia dopuszczalności wartości null powodują błędy 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 wprowadza te zmiany w NDK:

Ulepszone debugowanie własności deskryptora pliku

Android 10 zawiera fdsan, który ułatwia znajdowanie i rozwiązywanie problemów z własnością deskryptora pliku.

Błędy związane z nieprawidłowym zarządzaniem własnością deskryptora pliku, które zwykle objawiają się jako użycie po zamknięciupodwójne zamknięcie, są analogiczne do błędów użycie po zwolnieniupodwójne zwolnienie związanych z przydzielaniem pamięci, ale zwykle są znacznie trudniejsze do zdiagnozowania i naprawienia. fdsan próbuje wykrywać i zapobiegać nieprawidłowemu zarządzaniu deskryptorami plików, egzekwując własność 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 temu narzędziu.

ELF TLS

Aplikacje utworzone przy użyciu NDK z minimalnym poziomem API 29 mogą używać ELF TLS zamiast emutls. Dodano obsługę dynamicznych i statycznych linkerów, aby obsługiwać tę metodę obsługi zmiennych lokalnych wątku.

W przypadku aplikacji utworzonych na potrzeby interfejsu API na poziomie 28 lub niższym wprowadziliśmy ulepszenia, aby libgcc/compiler-rt mogło obejść niektóre problemy z emutls.

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

Środowisko wykonawcze

Android 10 wprowadza następującą zmianę w czasie działania.

Wywoływanie czyszczenia pamięci na podstawie funkcji mallinfo

Gdy małe obiekty Javy na platformie odwołują się do dużych obiektów w stercie C++, obiekty C++ można często odzyskać dopiero po zebraniu i np. sfinalizowaniu obiektu Javy. W poprzednich wersjach platforma szacowała rozmiary wielu obiektów C++ powiązanych z obiektami Java. To oszacowanie nie zawsze było dokładne i czasami powodowało znaczny wzrost wykorzystania pamięci, ponieważ platforma nie przeprowadzała odzyskiwania pamięci, gdy powinna to zrobić.

W Androidzie 10 moduł odśmiecania (GC) śledzi łączny rozmiar sterty przydzielonej przez system malloc(), dzięki czemu duże przydziały malloc() są zawsze uwzględniane w obliczeniach wywołujących odśmiecanie. Aplikacje, które przeplatają dużą liczbę alokacji w C++ z wykonywaniem kodu w Javie, mogą w rezultacie odnotować wzrost częstotliwości odśmiecania. W przypadku innych aplikacji może nastąpić niewielki spadek.

Testowanie i debugowanie

Android 10 zawiera te ulepszenia dotyczące testowania i debugowania:

Ulepszenia śledzenia systemu na urządzeniu

Od Androida 10 możesz określać limity rozmiaru i czasu trwania śladu podczas wykonywania śledzenia systemu na urządzeniu. Jeśli określisz jedną z tych wartości, system przeprowadzi długie śledzenie, okresowo kopiując bufor śledzenia do pliku docelowego podczas rejestrowania śladu. Śledzenie kończy się, gdy zostaną osiągnięte określone przez Ciebie limity rozmiaru lub czasu trwania.

Użyj tych dodatkowych parametrów, aby przetestować inne przypadki użycia niż w przypadku standardowego śledzenia. Możesz na przykład diagnozować błąd wydajności, który występuje tylko po długim czasie działania aplikacji. W takim przypadku możesz zarejestrować długi ślad obejmujący cały dzień, a następnie przeanalizować w raporcie harmonogram procesora, aktywność dysku, wątki aplikacji i inne dane, aby określić przyczynę błędu.

W Androidzie 10 i nowszych pliki śledzenia są zapisywane w formacie, który można otworzyć za pomocą Perfetto, projektu open source do instrumentacji i śledzenia wydajności. Możesz konwertować pliki śledzenia Perfetto na format Systrace.

Ulepszenia klasy TextClassifier

Android 10 udostępnia dodatkowe funkcje klasyfikacji tekstu w interfejsie TextClassifier.

Wykrywanie języka

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

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

Sugerowane działania w konwersacji

Metoda suggestConversationActions() działa podobnie do dotychczasowych metod klasyfikacji. Przyjmuje obiekt ConversationActions.Request i zwraca obiekt ConversationActions.

ConversationActions Obiekty składają się z listy obiektów ConversationAction. Każdy obiekt ConversationAction zawiera potencjalne sugerowane działanie i jego wynik ufności.

Inteligentne odpowiedzi i działania w powiadomieniach

W Androidzie 9 wprowadziliśmy możliwość wyświetlania sugerowanych odpowiedzi w powiadomieniu. Android 10 rozszerza tę funkcję o możliwość uwzględniania sugerowanych działań opartych na intencjach. Co więcej, platforma może automatycznie generować te sugestie. Aplikacje mogą nadal wyświetlać własne sugestie lub zrezygnować z sugestii generowanych przez system.

Interfejs API używany do generowania tych odpowiedzi jest częścią TextClassifier i został udostępniony deweloperom w Androidzie 10. Więcej informacji znajdziesz w sekcji poświęconej ulepszeniom TextClassifier.

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