Funkcje i interfejsy API Androida 10

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

Aby dowiedzieć się więcej o interfejsach API, zapoznaj się z raportem różnic w interfejsie API lub odwiedź dokumentację interfejsu API Androida – poszukaj interfejsów API, które zostały „dodane w interfejsie API na poziomie 29”. Zapoznaj się też ze zmianami w działaniu Androida 10 (w przypadku aplikacji kierowanych na interfejs API na poziomie 29 i wszystkich 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 szereg funkcji zabezpieczeń, które podsumowujemy w poniższych sekcjach.

Ulepszone okna uwierzytelniania biometrycznego

Android 10 wprowadza te ulepszenia obsługi uwierzytelniania biometrycznego:

  • Sprawdzenie możliwości uwierzytelniania biometrycznego.
  • Mechanizm zastępczy, który umożliwia użytkownikowi uwierzytelnianie za pomocą kodu PIN, wzoru lub hasła do urządzenia, jeśli nie może on uwierzytelnić się za pomocą danych biometrycznych.
  • Wskazówka, która informuje system, że nie musi wymagać potwierdzenia od użytkownika po uwierzytelnieniu za pomocą niejawnej metody biometrycznej. Możesz na przykład poinformować system, że po uwierzytelnieniu użytkownika za pomocą rozpoznawania twarzy nie jest wymagane żadne dalsze potwierdzenie.

Uruchamianie wbudowanego kodu DEX bezpośrednio z pliku APK

Od Androida 10 możesz nakazać platformie uruchamianie umieszczonego kodu DEX bezpośrednio z pliku APK aplikacji. Ta opcja może pomóc zapobiec atakowi, jeśli atakującemu uda się zmodyfikować lokalnie skompilowany 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 zapewnia lepszą wydajność i zwiększone bezpieczeństwo. Z naszych testów porównawczych wynika, że bezpieczne połączenia można nawiązywać nawet o 40% szybciej przy użyciu protokołu TLS 1.3 w porównaniu z TLS 1.2.

Więcej informacji o naszej implementacji TLS 1.3 znajdziesz w sekcji TLS na stronie poświęconej zmianom w działaniu wszystkich aplikacji.

Publiczny interfejs Conscrypt API

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

Zbiór klas w android.net.ssl zawiera metody statyczne umożliwiające dostęp 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 obsługuje połączenia peer-to-peer. Ta funkcja umożliwia aplikacji wyświetlanie użytkownikowi prośby o zmianę punktu dostępu, z którym jest połączone urządzenie, za pomocą WifiNetworkSpecifier do opisywania właściwości żądanej sieci. Połączenie peer-to-peer jest używane do celów niezwiązanych z siecią, takich jak konfiguracja początkowa 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 API żądania sieci Wi-Fi do połączeń peer-to-peer).

Interfejs API sugestii sieci Wi-Fi

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

Więcej informacji o tej funkcji znajdziesz w artykule Sugerowanie sieci Wi-Fi.

Ulepszenia trybów wysokiej wydajności i niskiego opóźnienia Wi-Fi

Android 10 umożliwia przekazanie wskazówki do modemu, aby zminimalizować opóźnienie.

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 niskiego opóźnienia, a w trybie niskiego opóźnienia może być włączona dalsza optymalizacja opóźnienia, w zależności od obsługi modemu.

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

Specjalistyczne wyszukiwania w resolverze DNS

Android 10 dodaje natywną obsługę specjalistycznych wyszukiwań DNS przy użyciu zarówno wyszukiwań w formie tekstu nieszyfrowanego, jak i trybu DNS-over-TLS. Wcześniej resolver DNS platformy obsługiwał tylko rekordy A i rekordy 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 API DnsResolver zapewnia ogólne, asynchroniczne rozpoznawanie, umożliwiając wyszukiwanie rekordów SRV, NAPTR i innych typów. Pamiętaj, że aplikacja musi przeanalizować odpowiedź.

Informacje o aplikacjach opartych na NDK znajdziesz w android_res_nsend.

Wi-Fi Easy Connect

Android 10 umożliwia korzystanie z funkcji Easy Connect do udostępniania danych logowania do sieci Wi-Fi urządzeniu równorzędnemu, co zastępuje wycofaną funkcję WPS. Aplikacje mogą zintegrować funkcję Easy Connect z procesem konfiguracji i obsługi administracyjnej za pomocą 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 zaktualizowano klasy interfejsu API WifiP2pConfig i WifiP2pManager, aby obsługiwały funkcje szybkiego nawiązywania połączenia z Wi-Fi Direct przy użyciu wstępnie określonych informacji. Te informacje są udostępniane przez kanał boczny, taki jak Bluetooth lub NFC.

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

Kotlin

manager.connect(channel, config, null)

Java

manager.connect(channel, config, null);

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

Android 10 umożliwia aplikacji korzystanie z połączeń BLE CoC do przesyłania większych strumieni danych między 2 urządzeniami BLE. Ten interfejs ukrywa mechanizmy Bluetooth i łączności, aby uprościć implementację.

Funkcje telefoniczne

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ń IP Multimedia Subsystem (IMS), w tym o jakości połączeń do i z sieci, 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 i ich odrzucanie 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ść, gdy ma nieodebrane połączenia. Korzystanie z tego interfejsu API eliminuje konieczność uzyskania od użytkownika uprawnień READ_CALL_LOG do udostępniania funkcji filtrowania połączeń i identyfikacji rozmówcy.

Interfejs API usługi przekierowywania połączeń

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

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

Oprócz wprowadzenia pamięci wydzielonej 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 jego zapisywania na dysku.
  • Jeśli wiesz, gdzie powinny być przechowywane pliki, możesz podać systemowi wskazówkę, gdzie ma zapisywać nowe pliki.
  • Każde zewnętrzne urządzenie pamięci masowej ma unikalną nazwę woluminu.

Multimedia i grafika

Android 10 wprowadza te nowe funkcje i interfejsy API dotyczące multimediów i grafiki:

Udostępnianie wejścia audio

Android 10 umożliwia jednoczesne udostępnianie wejścia audio przez 2 aplikacje. Pełne informacje znajdziesz w artykule Udostępnianie wejścia audio.

Przechwytywanie odtwarzanego dźwięku

Android 10 umożliwia aplikacji przechwytywanie odtwarzanego dźwięku z innych aplikacji. Pełne informacje znajdziesz w artykule Przechwytywanie odtwarzania.

Pasek przewijania w powiadomieniach MediaStyle

Od Androida 10 powiadomienia MediaStyle zawierają pasek przewijania. Pasek przewijania pokazuje postęp odtwarzania od PlaybackState.getPosition(), a w niektórych przypadkach można go użyć do przewinięcia do określonego miejsca w odtwarzanym programie. Wygląd i zachowanie paska przewijania są kontrolowane przez te reguły:

  • Pasek przewijania pojawia się, gdy jest aktywny element MediaSession, a jego czas trwania (określony przez MediaMetadata.METADATA_KEY_DURATION) jest większy niż 0. Oznacza to, że pasek nie pojawia się w przypadku strumieni o nieokreślonej długości, takich jak transmisje na żywo i audycje radiowe.
  • Jeśli sesja implementuje ACTION_SEEK_TO, użytkownik może przeciągnąć pasek przewijania, aby sterować miejscem odtwarzania.

Natywny interfejs API MIDI

Interfejs Android Native MIDI API (AMidi) umożliwia deweloperom aplikacji wysyłanie i odbieranie danych MIDI za pomocą kodu C/C++, co pozwala na ściślejszą integrację z logiką audio/sterowania 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 multimedialne.

Thermal API

Gdy urządzenia się przegrzewają, mogą ograniczać wydajność procesora lub GPU, co może mieć nieoczekiwany wpływ na aplikacje i gry. Aplikacje, które używają złożonej grafiki, wymagają intensywnych obliczeń lub utrzymują aktywność sieciową, są bardziej narażone na problemy, które mogą się różnić w zależności od urządzenia, chipsetu i częstotliwości rdzenia, poziomu integracji, a także obudowy i formatu urządzenia.

W Androidzie 10 aplikacje i gry mogą używać interfejsu API temperatury do monitorowania zmian na urządzeniu i podejmowania działań w celu utrzymania niższego zużycia energii i przywrócenia normalnej temperatury. Aplikacje rejestrują detektor w PowerManager, za pomocą którego system zgłasza bieżący stan termiczny – od lekkiego i umiarkowanego po poważny, krytyczny, awaryjny i wyłączenie.

Gdy urządzenie zgłasza obciążenie termiczne, aplikacje i gry mogą pomóc, ograniczając trwające działania, aby zmniejszyć zużycie energii na różne sposoby. Na przykład aplikacje do odtwarzania strumieniowego mogą zmniejszyć rozdzielczość, szybkość transmisji bitów lub ruch w sieci, aplikacja aparatu może wyłączyć lampę błyskową lub intensywne ulepszanie obrazu, gra może zmniejszyć liczbę klatek lub teselację wielokątów, aplikacja do multimediów może zmniejszyć głośność, a aplikacja map może wyłączyć GPS.

Interfejs Thermal API wymaga nowej warstwy HAL urządzenia. Obecnie jest obsługiwany na urządzeniach Pixel z Androidem 10. Współpracujemy z producentami urządzeń, aby jak najszybciej zapewnić szeroką obsługę w całym ekosystemie.

Aparat i obrazy

W Androidzie 10 wprowadzono te nowe funkcje związane z aparatem i obrazem:

Obsługa aparatu monochromatycznego

Funkcja aparatu monochromatycznego została wprowadzona w Androidzie 9 (poziom interfejsu API 28). Android 10 wprowadza kilka ulepszeń w obsłudze aparatów monochromatycznych:

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

Możesz użyć tej funkcji, aby zrobić natywne zdjęcie monochromatyczne. Logiczne urządzenie z kilkoma aparatami może używać aparatu monochromatycznego jako fizycznego aparatu podrzędnego, aby uzyskać lepszą jakość obrazu przy słabym oświetleniu.

Dynamic Depth Format

Od Androida 10 aparaty mogą przechowywać dane o głębi obrazu w osobnym pliku, używając nowego schematu o nazwie Dynamic Depth Format (DDF). Aplikacje mogą żądać zarówno obrazu JPG, jak i metadanych głębi, i wykorzystywać te informacje do stosowania 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 zapewnia wyższą jakość kodowania i mniejszy rozmiar pliku w porównaniu z innymi formatami.

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

Ulepszenia dotyczące wielu kamer

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

  • isSessionConfigurationSupported(SessionConfiguration sessionConfig) – umożliwia sprawdzenie, czy przekazana konfiguracja sesji może zostać użyta do utworzenia sesji przechwytywania obrazu z kamery.

  • LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID – umożliwia określenie identyfikatora aktywnego aparatu fizycznego, który obsługuje logiczne urządzenie aparatu. Możesz użyć zwróconych identyfikatorów, aby poprosić o strumienie logiczne i strumienie fizycznych aparatów podrzędnych w celu zwiększenia wydajności energetycznej.

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żesz wywołać funkcję isTextEntryKey(), aby określić, czy dany obiekt AccessibilityNodeInfo reprezentuje klawisz wprowadzania tekstu, który jest częścią klawiatury lub klawiatury numerycznej.

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świetlenie okna z komunikatem zamiany tekstu na mowę, jeśli usługa tego wymaga.

Skrót ułatwień dostępu, gdy włączona jest nawigacja 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 dostępny. Aby uzyskać dostęp do menu usług ułatwień dostępu, użytkownicy muszą wykonać jeden z tych gestów:

  • Przesunięcie 2 palcami w górę.
  • Przesuń 2 palcami w górę i przytrzymaj.

Skrót ułatwień dostępu na klawiaturach fizycznych

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świetlenia klawiatury ekranowej, nawet gdy urządzenie wykryje podłączoną klawiaturę fizyczną. Użytkownicy mogą zastąpić to działanie.

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

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 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 te ulepszenia usługi autouzupełniania.

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

Możesz użyć flagi FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST, aby 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 aktywności 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 detektor działań 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 istniejącego 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.

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

Jeśli używasz UserData.Builder na 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 liczby jako ostatnie 4 cyfry numeru karty kredytowej.

Obsługa klasyfikacji pól aplikacji

Android 10 dodaje FillResponse.setUserData(), co pozwala ustawić dane użytkownika dotyczące aplikacji na czas trwania sesji. Dzięki temu usługa autouzupełniania może wykrywać typy pól z treściami związanymi z aplikacją.

Interfejs i elementy sterujące systemu

Android 10 zawiera te ulepszenia interfejsu:

Obsługa funkcji PopFrame JVMTI

Android 10 dodaje obsługę funkcji can_pop_frames w implementacji JVMTI na Androidzie. Podczas debugowania ta funkcja umożliwia ponowne uruchamianie funkcji po wstrzymaniu w punkcie przerwania i dostosowaniu zmiennych lokalnych, globalnych lub implementacji funkcji. Więcej informacji znajdziesz na stronie Oracle z informacjami o ramkach wyskakujących.

Surface Control API

Android 10 udostępnia interfejs API SurfaceControl, który zapewnia niskopoziomowy dostęp do kompozytora systemowego (SurfaceFlinger). Dla większości użytkowników SurfaceView jest właściwym sposobem wykorzystania kompozytora. Interfejs API SurfaceControl może być przydatny w niektórych przypadkach, na przykład:

  • Synchronizacja wielu ekranów
  • Osadzanie platformy między procesami
  • Zarządzanie cyklem życia na niższym poziomie

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

Wykrywanie zawieszonego renderowania w komponencie WebView

W Androidzie 10 wprowadziliśmy klasę abstrakcyjną WebViewRenderProcessClient, której aplikacje mogą używać do wykrywania, czy WebView przestał 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łuje metodę onRenderProcessUnresponsive() klienta, przekazując WebView i WebViewRenderProcess. (Jeśli WebView jest procesem pojedynczym, parametr WebViewRenderProcess ma wartość null). Aplikacja może podjąć odpowiednie działanie, np. wyświetlić użytkownikowi okno z pytaniem, czy chce zatrzymać proces renderowania.

Jeśli WebView nie odpowiada, system okresowo wywołuje onRenderProcessUnresponsive() (nie częściej niż raz na 5 sekund), ale nie podejmuje żadnych innych działań. Jeśli WebView znów 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 ustawień użytkownikom w kontekście aplikacji. Dzięki temu użytkownicy nie muszą przechodzić do Ustawień, aby zmienić np. NFC lub mobilną transmisję danych i 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łą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ę, 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ń i przywrócenie połączenia. W Androidzie 10 przeglądarka może wyświetlać panel z najważniejszymi ustawieniami połączeń, 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ń, 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ć 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 połączeń. Jest to przydatne w przypadku aplikacji, które wymagają połączenia Wi-Fi do przesyłania lub pobierania dużych plików.
ACTION_NFC
Wyświetla wszystkie ustawienia związane z komunikacją Near Field Communication (NFC).
ACTION_VOLUME
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 wcześniejsze publikowanie odbiorców udostępniania bezpośredniego. Tak działa ShortcutManager. Ponieważ oba interfejsy API są podobne, rozszerzyliśmy interfejs API ShortcutInfo, aby ułatwić korzystanie z obu funkcji. Interfejs Sharing Shortcuts API umożliwia bezpośrednie przypisywanie kategorii lub osób do celu udostępniania. Cele udostępniania pozostają w systemie, dopóki ta sama aplikacja ich nie zaktualizuje lub nie zostanie odinstalowana.

Starszy mechanizm udostępniania bezpośredniego 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 dostarczania dodatkowych informacji o docelowym odbiorcy udostępnianych treści.

Odbiorcy udostępniania bezpośredniego

Skrót dynamiczny możesz opublikować jako cel bezpośredniego udostępniania. 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 elementów docelowych udostępniania.

Podgląd 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 aplikacji i Odbieranie prostych danych z innych aplikacji.

Ciemny motyw

Android 10 oferuje ciemny motyw, który dotyczy zarówno interfejsu systemu Android, jak i aplikacji działających na urządzeniu. Pełne informacje znajdziesz w artykule Ciemny motyw.

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

Android 10 wprowadza atrybut pliku manifestu XML foregroundServiceType, który należy uwzględnić w definicji kilku konkretnych usług. Można przypisać wiele typów usług na pierwszym planie do konkretnej usługi, ale rzadko jest to odpowiednie rozwiązanie.

W tabeli poniżej znajdziesz różne typy usług na pierwszym planie i usługi, w przypadku których należy 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 aktywności
dataSync pobieranie plików z sieci,
location Kontynuowanie działania wywołanego przez użytkownika
mediaPlayback odtwarzać audiobooki, podcasty lub muzykę;
mediaProjection Nagraj krótki film przedstawiający wyświetlacz urządzenia.
phoneCall Obsługa trwającego połączenia telefonicznego

Kotlin

Android 10 zawiera te aktualizacje dotyczące programowania w języku Kotlin.

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

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

Zwykle naruszenia kontraktu dotyczącego dopuszczania wartości null w Kotlinie powodują błędy kompilacji. Aby zapewnić zgodność z istniejącym kodem, dodawane są tylko adnotacje @RecentlyNullable i @RecentlyNonNull. Oznacza to, że naruszenia dotyczące dopuszczalności wartości null powodują wyświetlanie ostrzeżeń, a nie błędów.

Dodatkowo wszystkie adnotacje @RecentlyNullable i @RecentlyNonNull dodane w Androidzie 9 zostaną zmienione odpowiednio na @Nullable i @NonNull. Oznacza to, że w Androidzie 10 i nowszych naruszenia dopuszczalności wartości null powodują błędy, a nie ostrzeżenia.

Więcej informacji o zmianach w adnotacjach znajdziesz w artykule Android Pie SDK is now more Kotlin-friendly (Pakiet SDK Androida Pie jest teraz bardziej przyjazny dla Kotlina) na blogu dla deweloperów aplikacji na Androida.

NDK

Android 10 wprowadza te zmiany w NDK.

Ulepszone debugowanie własności deskryptora pliku

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

Błędy związane z niewłaściwym zarządzaniem własnością deskryptora pliku, które zwykle objawiają się jako użycie po zamknięciu i podwójne zamknięcie, są analogiczne do błędów alokacji pamięci użycie po zwolnieniu i podwójne zwolnienie, ale zwykle są znacznie trudniejsze do zdiagnozowania i naprawienia. fdsan próbuje wykrywać niewłaściwe zarządzanie deskryptorami plików lub mu zapobiegać, wymuszają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 fdsan.

ELF TLS

Aplikacje utworzone za pomocą NDK z minimalnym poziomem interfejsu API 29 mogą używać ELF TLS zamiast emutls. Dodano obsługę dynamicznego i statycznego linkera, aby umożliwić tę metodę obsługi zmiennych lokalnych wątku.

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

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

Środowisko wykonawcze

W Androidzie 10 wprowadziliśmy tę zmianę w środowisku wykonawczym.

Uruchamianie odśmiecania pamięci na podstawie Mallinfo

Gdy małe obiekty Java platformy odwołują się do dużych obiektów na stercie C++, obiekty C++ można często odzyskać tylko wtedy, gdy obiekt Java zostanie zebrany i na przykład sfinalizowany. W poprzednich wersjach platforma szacowała rozmiary wielu obiektów C++ powiązanych z obiektami Javy. Te szacunki nie zawsze były dokładne i czasami powodowały znaczne zwiększenie wykorzystania pamięci, ponieważ platforma nie usuwała niepotrzebnych danych, gdy powinna była to zrobić.

W Androidzie 10 moduł odśmiecania pamięci (GC) śledzi łączny rozmiar sterty przydzielonej przez system malloc(), dzięki czemu duże alokacje malloc() są zawsze uwzględniane w obliczeniach wyzwalających GC. W przypadku aplikacji, które przeplatają dużą liczbę alokacji C++ z wykonywaniem kodu Java, może to spowodować zwiększenie częstotliwości czyszczenia pamięci. 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 śledzenia, gdy przeprowadzasz śledzenie systemu na urządzeniu. Gdy podasz jedną z tych wartości, system wykona długie śledzenie, okresowo kopiując bufor śledzenia do pliku docelowego podczas rejestrowania śledzenia. Ś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ż te, które testujesz za pomocą standardowego śledzenia. Możesz na przykład diagnozować błąd wydajności, który występuje tylko po dłuższym czasie działania aplikacji. W takim przypadku możesz zarejestrować długi ślad obejmujący cały dzień, a następnie przeanalizować harmonogram procesora, aktywność dysku, wątki aplikacji i inne dane w raporcie, aby ustalić przyczynę błędu.

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

Ulepszenia TextClassifier

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

Wykrywanie języka

Metoda detectLanguage() działa podobnie do wcześniej istniejących metod klasyfikacji. Otrzymuje obiekt TextLanguage.Request i zwraca obiekt TextLanguage.

Obiekty TextLanguage składają się z listy uporządkowanych par. Każda para zawiera region i odpowiadający mu wynik ufności klasyfikacji.

Sugerowane działania dotyczące rozmów

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 i działania w powiadomieniach

W Androidzie 9 wprowadziliśmy możliwość wyświetlania sugerowanych odpowiedzi w powiadomieniu. Android 10 rozszerza tę funkcję, umożliwiając dodawanie sugerowanych działań opartych na intencjach. Co więcej, platforma może generować te sugestie automatycznie. 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ł też bezpośrednio udostępniony deweloperom w Androidzie 10. Więcej informacji znajdziesz w sekcji dotyczącej ulepszeń TextClassifier.

Jeśli aplikacja udostępnia własne sugestie, platforma nie generuje żadnych automatycznych sugestii. Jeśli nie chcesz, aby w powiadomieniach 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() i setAllowSystemGeneratedContextualActions().