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 API 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 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 WifiP2pConfig
i WifiP2pManager
, 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 przezMediaMetadata.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ą odbiornik w PowerManager, 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:
isSessionConfigurationSupported(SessionConfiguration sessionConfig)
– umożliwia sprawdzenie, czy przekazana konfiguracja sesji może być użyta do utworzenia sesji przechwytywania obrazu z kamery.LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
– umożliwia określenie identyfikatora aktywnej kamery fizycznej obsługującej logiczne urządzenie kamery. Zwrócone identyfikatory możesz wykorzystać do żądania strumieni logicznych i fizycznych strumieni z podkamer, aby zwiększyć oszczędność energii.
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:
- Zdefiniuj własną podklasę i zaimplementuj jej metody
onRenderProcessResponsive()
ionRenderProcessUnresponsive()
. - Dołącz instancję
WebViewRenderProcessClient
do co najmniej jednego obiektuWebView
. - Jeśli
WebView
przestanie odpowiadać, system wywoła metodęonRenderProcessUnresponsive()
klienta, przekazującWebView
iWebViewRenderProcess
. (JeśliWebView
jest procesem pojedynczym, parametrWebViewRenderProcess
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.


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 ShortcutInfo
interfejs 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 aplikacji i Odbieranie 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
i @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
i @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ęciu i podwójne zamknięcie, są analogiczne do błędów użycie po zwolnieniu i podwó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()
i setAllowSystemGeneratedContextualActions()
.