Funkcje i interfejsy API Androida 10

Android 10 wprowadza świetne funkcje i możliwości dla użytkowników i programistów. Ten dokument zawiera informacje o tym, co jest dostępne dla deweloperów.

Aby dowiedzieć się więcej o interfejsach API, przeczytaj raport porównawczy interfejsów API lub zajrzyj do dokumentacji interfejsu API Androida – poszukaj interfejsów API, które zostały „dodane w poziomie interfejsu API 29”. Sprawdź też zmiany zachowania Androida 10 (dotyczące aplikacji kierowanych na poziom interfejsu API 29wszystkich aplikacji) oraz zmiany dotyczące prywatności, aby dowiedzieć się, w jakich obszarach zmiany platformy mogą mieć wpływ na Twoje aplikacje.

Ulepszenia zabezpieczeń

Android 10 wprowadza wiele funkcji bezpieczeństwa, które są opisane w następnych sekcjach.

Ulepszone okna uwierzytelniania biometrycznego

Android 10 wprowadza te ulepszenia obsługi uwierzytelniania biometrycznego:

  • Sprawdzenie możliwości uwierzytelniania biometrycznego.
  • mechanizm zapasowy, który umożliwia użytkownikowi uwierzytelnienie za pomocą kodu PIN, wzoru lub hasła, jeśli nie może uwierzytelnić się za pomocą danych biometrycznych.
  • Wskazówka, która informuje system, że nie należy wymagać potwierdzenia od użytkownika po uwierzytelnieniu za pomocą niejawnego sposobu biometrycznego. Możesz na przykład powiedzieć systemowi, że po uwierzytelnieniu użytkownika za pomocą uwierzytelniania twarzą nie trzeba wymagać dalszego potwierdzenia.

Uruchamianie umieszczonego kodu DEX bezpośrednio z pliku APK

Od Androida 10 możesz zlecić platformie uruchamianie osadzonego kodu DEX bezpośrednio z pliku APK aplikacji. Ta opcja może pomóc w zapobieganiu atakom, jeśli atakującemu uda się zmienić lokalnie skompilowany kod na urządzeniu.

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

Obsługa TLS 1.3

W Androidzie 10 dodano obsługę TLS 1.3. TLS 1.3 to duża wersja standardu TLS, która zapewnia lepszą wydajność i lepsze zabezpieczenia. Nasze testy porównawcze wskazują, że bezpieczne połączenia można nawiązywać nawet o 40% szybciej za pomocą protokołu TLS 1.3 w porównaniu z protokołem TLS 1.2.

Więcej informacji o implementacji TLS 1.3 znajdziesz w sekcji poświęconej TLS na stronie ze zmianami zachowania we wszystkich aplikacjach.

Interfejs Public Conscrypt API

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

Kolekcja klas w android.net.ssl zawiera statyczne metody, które umożliwiają dostęp do funkcji niedostępnych w ogólnych interfejsach API javax.net.ssl. Nazwy tych klas można odgadnąć na podstawie liczby mnogiej klasy javax.net.ssl. Na przykład kod, który działa na instancjach klasy javax.net.ssl.SSLSocket, może zamiast tego używać metod z klasy SSLSockets.

Funkcje łączności

Android 10 zawiera kilka ulepszeń związanych z obsługą sieci i łącznością.

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

Android 10 obsługuje połączenia peer-to-peer. Dzięki tej funkcji aplikacja może poprosić użytkownika o zmianę punktu dostępu, z którym urządzenie jest połączone. Służy do opisania właściwości żądanej sieci za pomocą polecenia WifiNetworkSpecifier. Połączenie typu peer-to-peer jest używane do celów innych niż dostarczanie sieci, takich jak konfiguracja inicjowania dla urządzeń dodatkowych, takich jak Chromecast czy sprzęt Google Home.

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

Interfejs API sugestii dotyczących sieci Wi-Fi

Android 10 obsługuje wyświetlanie użytkownikowi prośby o połączenie z punktem dostępu Wi-Fi. Możesz podać sugestie, z którą siecią chcesz się połączyć. Platforma wybierze, które punkty dostępu zaakceptować, na podstawie danych z Twojej aplikacji i innych aplikacji.

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

Ulepszenia w trybach Wi-Fi o wysokiej wydajności i małym opóźnieniu

Android 10 umożliwia podanie wskazówki dotyczącej modemu, aby zminimalizować opóźnienia.

Android 10 rozszerza interfejs API blokady Wi-Fi, aby skutecznie obsługiwać tryb o wysokiej wydajności i tryb o niskiej latencji. Tryb oszczędzania energii Wi-Fi jest wyłączony 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 niskiej latencji jest włączony tylko wtedy, gdy aplikacja, która uzyskała blokadę, działa na pierwszym planie, a ekran jest włączony. Tryb niskiego opóźnienia jest szczególnie przydatny w przypadku gier mobilnych w czasie rzeczywistym.

Specjalistyczne wyszukiwania w rozwiązaniu DNS

Android 10 wprowadza natywną obsługę specjalistycznych wyszukiwań DNS z użyciem zarówno tekstu jawnego, jak i trybu DNS-over-TLS. Wcześniej platforma DNS resolver obsługiwała tylko rekordy A i AAAA, które umożliwiają wyszukiwanie tylko adresów IP powiązanych z nazwą, ale nie obsługiwała żadnych innych typów rekordów. Interfejs API DnsResolver udostępnia ogólne, asynchroniczne rozwiązanie, które umożliwia wyszukiwanie SRV, NAPTR i innych typów rekordów. Pamiętaj, że analizowanie odpowiedzi należy do aplikacji.

Informacje o aplikacjach opartych na NDK znajdziesz w artykule android_res_nsend.

Wi-Fi Easy Connect

Android 10 umożliwia korzystanie z Easy Connect do udostępniania danych logowania do Wi-Fi urządzeniu partnerowi jako zamiennik przestarzałego WPS. Aplikacje mogą zintegrować Easy Connect z procesem konfiguracji i zarządzania, używając inencji ACTION_PROCESS_WIFI_EASY_CONNECT_URI.

Więcej informacji o tej funkcji znajdziesz w artykule Łatwe łączenie z siecią Wi-Fi.

Interfejs API połączenia Wi-Fi Direct

W Androidzie 10 klasy interfejsu API WifiP2pConfigWifiP2pManager zostały zaktualizowane, aby obsługiwać szybkie nawiązywanie połączeń z Wi-Fi Direct za pomocą informacji zdefiniowanych wstępnie. Te informacje są udostępniane przez kanał poboczny, taki jak Bluetooth lub NFC.

Poniższy przykładowy kod pokazuje, jak utworzyć grupę za pomocą zdefiniowanych wstępnie informacji:

Kotlin

val manager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager
val channel = manager.initialize(this, mainLooper, null)

// prefer 5G band for this group
val config = WifiP2pConfig.Builder()
    .setNetworkName("networkName")
    .setPassphrase("passphrase")
    .enablePersistentMode(false)
    .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
    .build()

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null)

Java

WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
Channel channel = manager.initialize(this, getMainLooper(), null);

// prefer 5G band for this group
WifiP2pConfig config = new WifiP2pConfig.Builder()
.setNetworkName("networkName")
.setPassphrase("passphrase")
.enablePersistentMode(false)
.setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
.build();

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null);

Aby dołączyć do grupy za pomocą danych logowania, zastąp manager.createGroup() następującymi wartościami:

Kotlin

manager.connect(channel, config, null)

Java

manager.connect(channel, config, null);

Kanały Bluetooth LE Connection Oriented Connections (CoC)

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

Funkcje związane z telefonią

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

Ulepszenia jakości połączeń

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

Filtrowanie połączeń i identyfikator dzwoniącego

Android 10 udostępnia Twojej aplikacji możliwość rozpoznawania połączeń, które nie są zapisane w książce adresowej użytkownika, jako potencjalnych połączeń spamowych i cichego odrzucania ich w imieniu użytkownika. Informacje o tych zablokowanych połączeniach są rejestrowane w rejestrze połączeń jako zablokowane połączenia, aby zapewnić użytkownikowi większą przejrzystość w przypadku braku połączeń. Korzystanie z tego interfejsu API eliminuje konieczność uzyskania od użytkownika uprawnień READ_CALL_LOG, aby udostępnić funkcję sprawdzania połączeń i identyfikacji dzwoniącego.

Interfejs API usługi przekierowywania połączeń

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

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

Oprócz wprowadzenia ograniczonego miejsca na dane Android 10 oferuje też te funkcje związane z zewnętrznym miejscem na dane:

Multimedia i grafika

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

Udostępnianie wejścia audio

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

Przechwytywanie odtwarzania dźwięku

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

Pasek w powiadomieniach w stylu MediaStyle

Począwszy od Androida 10, MediaStyle powiadomienia wyświetlają pasek przewijania. Suwak odtwarzania pokazuje postęp odtwarzania od PlaybackState.getPosition(). W niektórych przypadkach można użyć suwaka, aby przejść do określonego miejsca w odtwarzanym programie. Wygląd i działanie suwaka jest kontrolowany przez te reguły:

  • Pasek przewijania pojawia się, jeśli jest aktywny element MediaSession, a jego czas trwania (określony przez MediaMetadata.METADATA_KEY_DURATION) jest większy od zera. Oznacza to, że pasek nie pojawia się w przypadku strumieni nieokreślonych, takich jak transmisje na żywo i audycje radiowe.
  • Jeśli sesja implementuje ACTION_SEEK_TO, użytkownik może przeciągać suwak, aby kontrolować miejsce odtwarzania.

Natywne API MIDI

Interfejs API do obsługi MIDI natywnych na Androida (AMidi) umożliwia deweloperom aplikacji wysyłanie i odbieranie danych MIDI za pomocą kodu C/C++, co pozwala na ściślejszą integrację z logiką sterowania i odtwarzania dźwięku w języku C/C++ oraz minimalizuje potrzebę korzystania z JNI.

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

Ulepszenia MediaCodecInfo

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

Więcej informacji znajdziesz w artykule Kodeki multimedialne.

Thermal API

Gdy urządzenia się nagrzeją, mogą spowalniać procesor lub GPU, co może w nieoczekiwany sposób wpływać na aplikacje i gry. W przypadku aplikacji używających złożonej grafiki, intensywnie wykorzystywanych obliczeń lub długotrwałej aktywności sieciowej występuje większe prawdopodobieństwo wystąpienia problemów. Mogą się one różnić w zależności od urządzenia, w zależności od częstotliwości na poziomie chipsetu i rdzeni, poziomu integracji, a także opakowania i formatu urządzenia.

W Androidzie 10 aplikacje i gry mogą korzystać z interfejsu Thermal API, aby monitorować zmiany na urządzeniu i podejmować działania w celu zmniejszenia zużycia energii i przywrócenia normalnej temperatury. Aplikacje rejestrują listeneraPowerManagerze, który przekazuje systemowi bieżący stan termiczny urządzenia: od lekkiego i umiarkowanego do poważnego, krytycznego, awaryjnego i wymagającego wyłączenia.

Gdy urządzenie raportuje stres termiczny, aplikacje i gry mogą pomóc przez przerwanie trwającej aktywności, aby na różne sposoby zmniejszyć zużycie energii. Na przykład aplikacje do strumieniowego przesyłania danych mogą zmniejszyć rozdzielczość/szybkość transmisji bitów lub ruch sieciowy, aplikacja do obsługi aparatu może wyłączyć flash lub intensywne ulepszanie obrazu, gra może zmniejszyć częstotliwość klatek lub tesselację wielokątów, aplikacja do obsługi multimediów może zmniejszyć głośność głośnika, a aplikacja do obsługi map może wyłączyć GPS.

The Heat API wymaga nowej warstwy HAL urządzenia – jest ona obecnie obsługiwana na urządzeniach Pixel z Androidem 10. Współpracujemy z producentami urządzeń, aby jak najszybciej wprowadzić szerokie wsparcie do tego ekosystemu.

Aparat i obrazy

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

Obsługa kamery monochromatycznej

W Androidzie 9 (poziom interfejsu API 28) po raz pierwszy wprowadzono obsługę monochromatycznego aparatu. Android 10 wprowadza kilka ulepszeń obsługi monochromatycznych aparatów:

  • Obsługa formatu strumienia Y8 w celu zwiększenia efektywności wykorzystania pamięci.
  • Obsługa monochromatycznego rejestrowania w formacie DNG.
  • Wprowadzenie enumeracji MONO i NIR CFA w celu rozróżnienia zwykłych kamer monochromatycznych i kamer na podczerwień.

Ta funkcja umożliwia przechwytywanie natywnego obrazu monochromatycznego. Urządzenie z wieloma aparatami może używać aparatu monochromatycznego jako fizycznego aparatu pomocniczego, aby uzyskać lepszą jakość obrazu przy słabym oświetleniu.

Format dynamicznej głębi ostrości

Od Androida 10 kamery mogą przechowywać dane głębi obrazu w osobnym pliku za pomocą nowego schematu Dynamic Depth Format (DDF). Aplikacje mogą żądać zarówno obrazu JPG, jak i jego metadanych głębi, aby stosować rozmazywanie w ramach przetwarzania końcowego bez modyfikowania oryginalnych danych obrazu.

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

Format pliku obrazu o wysokiej wydajności

Format HEIF to standardowy format plików graficznych i wideo, który zapewnia wyższą jakość kodowania i mniejszy rozmiar pliku w porównaniu z innymi formatami plików.

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

Ulepszenia dotyczące wielu kamer

Android 10 ułatwia połączenie kilku aparatów w jedną logiczną kamerę – ta funkcja została wprowadzona w Androidzie 9 (poziom interfejsu API 28). Do interfejsu Camera2 API dodano następujące elementy:

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

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

Flaga klucza dostępu AccessibilityNodeInfo

Od Androida 10 można wywołać metodę isTextEntryKey(), by określić, czy AccessibilityNodeInfo reprezentuje klawisz do wprowadzania tekstu, który jest częścią klawiatury lub klawiatury.

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

W przypadku, gdy użytkownicy muszą użyć skrótu ułatwień dostępu, aby uruchomić usługę ułatwień dostępu, Android 10 umożliwia wyświetlenie promptu odczytywania tekstu na głos, jeśli usługa tego zażąda.

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

Gdy funkcja nawigacji za pomocą gestów jest włączona w Androidzie 10, przycisk ułatwień nie jest widoczny ani nie można go wybrać. Aby otworzyć menu usług ułatwień dostępu, użytkownicy muszą wykonać jeden z tych gestów:

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

Skrót ułatwień dostępu dla klawiatur fizycznych

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

Ulepszenie sterowania klawiaturą ekranową

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

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

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

Ulepszenia autouzupełniania

Android 10 zawiera te ulepszenia usługi autouzupełniania:

Żądania dotyczące autouzupełniania związane z zgodnością

Możesz użyć flagi FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST, aby określić, czy prośba o autouzupełnianie została wygenerowana w trybie zgodności.

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

W przypadku przypadków, w których aplikacja używa wielu aktywności do wyświetlania nazwy użytkownika, hasła i innych pól, możesz użyć flagi SaveInfo.FLAG_DELAY_SAVE.

Interakcja użytkownika z interfejsem zapisu

Pole hasła w oknie zapisywania możesz wyświetlać i ukrywać, ustawiając w tym oknie listenera akcji i zmieniając widoczność odpowiedniego widoku zdalnego hasła.

Obsługa aktualizowania zbiorów danych

Autouzupełnianie może aktualizować istniejące hasła. Jeśli na przykład użytkownik ma już zapisane hasło i zapisuje nowe, Autouzupełnianie zamiast zapisać nowe hasło, poprosi o zaktualizowanie dotychczasowego.

Ulepszenia klasyfikacji pól

Android 10 zawiera te ulepszenia interfejsu Field Classification API:

Konstruktor UserData.Builder

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

Zezwalanie na mapowanie wartości na różne typy identyfikatorów kategorii

Korzystając z funkcji UserData.Builder w Androidzie 10, możesz teraz mapować wartości na różne typy identyfikatorów kategorii. W poprzednich wersjach wyjątek był zgłaszany, jeśli wartość została dodana więcej niż raz.

Ulepszona obsługa numerów kart kredytowych

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

Obsługa klasyfikacji pól w przypadku poszczególnych aplikacji

Android 10 wprowadza FillResponse.setUserData(), który umożliwia ustawianie danych użytkownika dotyczących konkretnej aplikacji na czas trwania sesji. Ułatwia to usłudze autouzupełniania typy pól z zawartością specyficzną dla aplikacji.

Elementy sterujące interfejsu i systemu

Android 10 wprowadza te ulepszenia interfejsu:

Obsługa limitów PopFrame JVMTI

Android 10 obsługuje interfejs can_pop_frames w ramach implementacji JVMTI na Androidzie. Podczas debugowania ta funkcja umożliwia ponowne uruchamianie funkcji po wstrzymaniu w miejscu punktu przerwania i zmian lokalnych, globalnych lub implementacji funkcji. Więcej informacji znajdziesz na stronie z informacjami o ramce Pop Frame firmy Oracle.

Interfejs API kontroli wyświetlania

Android 10 udostępnia interfejs API SurfaceControl zapewniający niski poziom dostępu do kompozytora systemowego (SurfaceFlinger). W przypadku większości użytkowników SurfaceView jest odpowiednim sposobem na wykorzystanie kompozytora. Interfejs API SurfaceControl może być przydatny w pewnych przypadkach, na przykład:

  • Synchronizacja wielu powierzchni
  • Wstawianie powierzchni w wielu procesach
  • Zarządzanie czasem trwania na niższym poziomie

Interfejs API SurfaceControl jest dostępny w pakiecie SDK i w połączeniach NDK. Wdrożenie NDK obejmuje interfejs API do ręcznej wymiany buforów z kompozytorem. Jest to alternatywa dla użytkowników, którzy napotkali ograniczenia w BufferQueue.

Wykrywanie zawieszenia renderowania WebView

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

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

Jeśli WebView nie odpowiada, system okresowo wywołuje metodę onRenderProcessUnresponsive() (nie częściej niż co 5 sekund), ale nie wykonuje żadnych innych działań. Jeśli WebView znów zacznie odpowiadać, system wywoła onRenderProcessResponsive() tylko raz.

Panele ustawień

Android 10 wprowadza panele ustawień, interfejs API, który umożliwia aplikacjom wyświetlanie ustawień użytkownikom w kontekście ich aplikacji. Dzięki temu użytkownicy nie muszą wchodzić w ustawienia Ustawienia, aby zmienić takie rzeczy jak NFC czy dane mobilne, aby korzystać z aplikacji.

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

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

Załóżmy na przykład, że użytkownik otwiera przeglądarkę, gdy jego urządzenie jest w trybie samolotu. Przed Androidem 10 aplikacja mogła wyświetlać tylko ogólny komunikat z prośbą o otwarcie Ustawienia w celu przywrócenia połączenia. W Androidzie 10 aplikacja przeglądarki może wyświetlać panel z podstawowymi ustawieniami łączności, takimi jak tryb samolotowy, Wi-Fi (w tym sieci w pobliżu) i dane mobilne. Dzięki temu użytkownicy mogą przywrócić połączenie bez wychodzenia z aplikacji.

Aby wyświetlić panel ustawień, wywołaj intencję za pomocą jednej z tych czynności: Settings.Panel

Kotlin

val panelIntent = Intent(Settings.Panel.settings_panel_type)
startActivityForResult(panelIntent)

Java

Intent panelIntent = new Intent(Settings.Panel.settings_panel_type);
startActivityForResult(panelIntent);

settings_panel_type może być:

ACTION_INTERNET_CONNECTIVITY
Pokazuje ustawienia związane z połączeniem z internetem, takie jak tryb samolotowy, Wi-Fi i mobilna transmisja danych.
ACTION_WIFI
Pokazuje ustawienia Wi-Fi, ale nie inne ustawienia łączności. Jest to przydatne w przypadku aplikacji, które potrzebują połączenia Wi-Fi do przesyłania lub pobierania dużych plików.
ACTION_NFC
Wyświetla wszystkie ustawienia związane z komunikacją Near Field Communication(NFC)
.
ACTION_VOLUME
Pokazuje ustawienia głośności wszystkich strumieni audio.

Ulepszenia udostępniania

Android 10 wprowadza kilka ulepszeń udostępniania:

Interfejs API Sharing Shortcuts

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

Zamiast reaktywnego pobierania wyników na żądanie, interfejs Share Shortcuts API umożliwia aplikacjom z wyprzedzeniem publikowanie bezpośrednich wartości docelowych. W ten sposób działa ShortcutManager. Ponieważ oba interfejsy API są podobne, rozszerzyliśmy interfejs ShortcutInfoAPI, aby ułatwić korzystanie z obu funkcji. Za pomocą interfejsu Sharing Shortcuts API możesz bezpośrednio przypisywać kategorie lub osoby do docelowego odbiorcy udostępnienia. Cele udostępniania pozostaną 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ższą priorytet niż aplikacje korzystające z interfejsu Sharing Shortcuts API.

ShortcutInfo.Builder dodaje i ulepsza metody, aby dostarczyć dodatkowe informacje o docelowym odbiorcy.

Docelowe udziały w kliknięciach

Dynamiczny skrót możesz opublikować jako cel udostępniania bezpośredniego. Zobacz artykuł Publikowanie bezpośrednich celów udostępniania.

ShortcutManagerCompat to nowy interfejs API AndroidX, który zapewnia zgodność wsteczną ze starym interfejsem DirectShare API. Jest to preferowany sposób publikowania celów udostępniania.

Podgląd tekstu

Gdy aplikacja udostępnia tekst, może wyświetlić opcjonalny podgląd treści w interfejsie panelu udostępniania.

Zobacz dodawanie podglądów tekstu sformatowanego.

Więcej informacji

Więcej informacji o udostępnianiu danych przez aplikacje znajdziesz w artykułach Wysyłanie prostych danych do innych aplikacji i Odbieranie prostych danych z innych aplikacji.

Ciemny motyw

Android 10 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 o ciemnym motywie.

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

Android 10 wprowadza atrybut pliku XML foregroundServiceType, który należy uwzględnić w definicji kilku konkretnych usług. Możliwe jest przypisanie do danej usługi wielu typów usług działających na pierwszym planie, choć rzadko jest to właściwe.

W tabeli poniżej przedstawiono różne typy usług na pierwszym planie oraz usługi, w których przypadku należy zadeklarować konkretny typ:

Typ usługi na pierwszym planie Przykładowy przypadek użycia usługi, która powinna zadeklarować ten typ
connectedDevice Monitorowanie urządzenia do noszenia śledzącego aktywność
dataSync Pobieranie plików z sieci
location Kontynuowanie działania wywołanego przez użytkownika
mediaPlayback Odtwarzanie audiobooka, podcastu lub muzyki
mediaProjection Nagrywanie filmu z ekranu urządzenia w krótkim czasie
phoneCall Zarządzanie trwającymi połączeniami telefonicznymi

Kotlin

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

Adnotacje o możliwości anulowania w przypadku interfejsów API libcore

Android 10 zwiększa zasięg adnotacji null w pakiecie SDK interfejsów API libcore. Te adnotacje umożliwiają deweloperom aplikacji, którzy korzystają z analizy null w Android Studio przy użyciu Kotlina lub Javy, aby uzyskiwać informacje o pustości podczas interakcji z tymi interfejsami API.

Normalnie w przypadku naruszenia umowy o wartości null w narzędziu Kotlin występują błędy kompilacji. Aby zapewnić zgodność z istniejącym kodem, dodane zostaną tylko adnotacje @RecentlyNullable i @RecentlyNonNull. Oznacza to, że przypadki naruszenia wartości null skutkują ostrzeżeniami, a nie błędami.

Dodatkowo wszystkie adnotacje @RecentlyNullable lub @RecentlyNonNull dodane w Androidzie 9 zostaną odpowiednio zmienione na @Nullable lub @NonNull. Oznacza to, że w Androidzie 10 i nowszych wersjach naruszenia zasad dotyczących wartości null prowadzą do błędów, a nie ostrzeżeń.

Więcej informacji o zmianach w adnotacjach znajdziesz w artykule Android Pie SDK is now more Kotlin-friendly na blogu dla deweloperów aplikacji na Androida.

NDK

Android 10 zawiera te zmiany w NDK:

Ulepszone debugowanie własności deskryptora pliku

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

Błędy związane z niewłaściwym zarządzaniem własnością opisu pliku, które zwykle występują jako use-after-closedouble-close, są analogiczne do błędów alokacji pamięci use-after-freedouble-free, ale są znacznie trudniejsze do zdiagnozowania i naprawienia. Narzędzie fdsan próbuje wykryć lub zapobiec nieprawidłowemu zarządzaniu opisem pliku, wymuszając własność opisu pliku.

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

ELF TLS

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

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

Więcej informacji znajdziesz w artykule Zmiany w Androidzie dla deweloperów korzystających z NDK.

Środowisko wykonawcze

Android 10 zawiera następującą zmianę czasu wykonywania.

uruchamianie czyszczenia pamięci na podstawie informacji z Mallinfo.

Kiedy obiekty Java na małej platformie odwołują się do dużych obiektów na stercie C++, obiekty C++ często można odzyskać dopiero po zebraniu obiektu Java i np. jego sfinalizowaniu. W poprzednich wersjach platforma szacowała rozmiary wielu obiektów C++, które były powiązane z obiektmi Java. Ta ocena nie zawsze była dokładna i czasami powodowała znaczne zwiększenie wykorzystania pamięci, ponieważ platforma nie była w stanie przeprowadzić procesu usuwania elementów nieużywanych.

W Androidzie 10 zbieracz pamięci (GC) śledzi całkowity rozmiar stosu przydzielonego przez system malloc(), aby zapewnić, że duże przydzielenia malloc()zawsze będą uwzględniane w obliczeniach uruchamiania GC. Aplikacje, które przeplatają dużą liczbę alokacji C++ z wykonaniem kodu Java, mogą w efekcie zwiększyć częstotliwość usuwania elementów. W przypadku innych aplikacji może nastąpić niewielki spadek.

Testowanie i debugowanie

Android 10 zawiera poniższe ulepszenia testowania i debugowania.

Ulepszenia śledzenia systemu na urządzeniu

Od Androida 10 możesz określać limity rozmiaru i czasu trwania śledzenia podczas wykonywania śledzenia systemu na urządzeniu. Gdy określisz jedną z tych wartości, system wykona długie śledzenie, okresowo kopiując bufor śledzenia do pliku docelowego podczas zapisywania śledzenia. Śledzenie kończy się, gdy osiągniesz określone limity rozmiaru lub czasu.

Za pomocą tych dodatkowych parametrów możesz testować inne przypadki użycia niż w przypadku standardowego śledzenia. Możesz na przykład diagnozować błąd związany z wydajnością, który występuje dopiero po długim czasie działania aplikacji. W takim przypadku możesz przeprowadzić długie śledzenie przez cały dzień, a następnie przeanalizować planowanie procesora, aktywność dysku, wątki aplikacji i inne dane w raporcie, aby określić przyczynę błędu.

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

Ulepszenia interfejsu TextClassifier

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

Wykrywanie języka

Metoda detectLanguage() działa podobnie jak wcześniejsze metody klasyfikacji. Pobiera 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ą wartość wskaźnika ufności dla klasyfikacji.

Sugerowane działania dotyczące rozmów

Metoda suggestConversationActions() działa podobnie jak istniejące metody klasyfikacji. Funkcja ta otrzymuje obiekt ConversationActions.Request i zwraca obiekt ConversationActions.

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

Inteligentne odpowiedzi i działania w powiadomieniach

Android 9 wprowadził możliwość wyświetlania sugerowanych odpowiedzi w powiadomieniu. Android 10 wzbogaca te możliwości o sugerowane działania oparte na intencjach. Platforma może też automatycznie generować sugestie. Aplikacje nadal mogą przesyłać własne sugestie lub zrezygnować z sugestii generowanych przez system.

Interfejs API używany do generowania tych odpowiedzi jest częścią interfejsu TextClassifier i jest również udostępniany bezpośrednio deweloperom w Androidzie 10. Więcej informacji znajdziesz w sekcji o ulepszeniach TextClassifier.

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