Funkcje i interfejsy API Androida 9

Android 9 (poziom API 28) wprowadza nowe, przydatne funkcje użytkowników i deweloperów. W tym dokumencie opisujemy nowości dla deweloperów.

Więcej informacji o nowych interfejsach API znajdziesz w raportów o różnicach między interfejsami API lub Dokumentacja API na Androida. Nie zapomnij też sprawdzić Zmiany w działaniu Androida 9 do nauki o obszarach, w których zmiany na platformie mogą wpłynąć na Twoje aplikacje.

Pozycjonowanie we wnętrzach z Wi-Fi RTT

Nowe interfejsy API RTT obsługują pozycjonowanie w pomieszczeniach w Twoich aplikacjach.

Android 9 obsługuje platformę Wi-Fi zgodnie ze standardem IEEE 802.11-2016 protokołu RTT (Wi-Fi Round-Trip-Time, RTT), który pozwala wykorzystać pozycjonowania wnętrz w aplikacjach.

Na urządzeniach z Androidem 9 z obsługą sprzętową aplikacje mogą używać za pomocą interfejsów RTT API do pomiaru odległość do pobliskich punktów dostępu Wi-Fi obsługujących RTT. Urządzenie musi mieć włączone usługi lokalizacyjne i skanowanie Wi-Fi (w polu Ustawienia > lokalizacji), a aplikacja musi mieć ACCESS_FINE_LOCATION. uprawnienia. Aby korzystać z RTT, urządzenie nie musi łączyć się z punktami dostępu. Ze względu na ochronę prywatności tylko telefon jest w stanie określić odległość punkt dostępu; punkty dostępu nie mają tych informacji.

Jeśli urządzenie mierzy odległość co najmniej 3 punktów dostępu, możesz użyć algorytm powielania w celu oszacowania pozycji urządzenia, która najlepiej do niej pasuje. pomiarów. Wynik jest zwykle dokładny z zakresu 1–2 metrów.

Dzięki takiej dokładności możesz tworzyć nowe funkcje, takie jak nawigacja w budynku i szczegółowe usługi oparte na lokalizacji, np. jednoznaczne sterowanie głosem (na przykład „Włącz to światło”) i informacji opartych na lokalizacji (np. „Czy są dostępne oferty specjalne na ten produkt?”).

Zobacz interfejs Wi-Fi RTT API używany w Android WifiRttScan w wersji demonstracyjnej.

Więcej informacji: Lokalizacja Wi-Fi: zakres RTT.

Obsługa wycięcia w ekranie

Ekran opcji programisty z różnymi rozmiarami wycięć

Testowanie wycięcia w ekranie za pomocą emulatora

Android 9 obsługuje najnowsze ekrany o szerokim zakresie z wycięciami w ekranach pod kątem kamer i głośników. DisplayCutout pozwala ustalić położenie i kształt niedziałających obszarów, nie powinny się wyświetlać. Aby określić istnienie i miejsce docelowe tych wycięć, użyj funkcji getDisplayCutout() .

nowy atrybut układu okna, layoutInDisplayCutoutMode umożliwia rozmieszczenie treści wokół wycięć w urządzeniu. Możesz ustawić ten atrybut na jedną z tych wartości:

Możesz symulować wycięcie w ekranie na dowolnym urządzeniu lub w emulatorze z Androidem 9. w następujący sposób:

  1. Włącz opcje programisty.
  2. Na ekranie Opcje programisty przewiń w dół do sekcji Rysunek. i wybierz Symuluj wyświetlacz z wycięciem.
  3. Wybierz rozmiar wycięcia.
.

Powiadomienia

Android 9 wprowadza kilka ulepszeń powiadomień. Wszystkie z nich dostępne dla programistów kierujących reklamy na interfejs API na poziomie 28 lub wyższym.

Powiadomienia o wiadomościach

MessagingStyle z załączonym zdjęciem.

Powiadomienie o wiadomości

MessagingStyle z odpowiedziami i rozmowami.

Przykładowy kod, który korzysta z powiadomień, w tym funkcji Androida 9, znajdziesz tutaj Osoby Fragment.

Ulepszone przesyłanie wiadomości

Począwszy od Androida w wersji 7.0 (poziom interfejsu API 24) można dodać działanie, aby odpowiedzieć wiadomości lub wpisywać tekst bezpośrednio z poziomu powiadomienia. Android 9 ulepsza tę funkcję, wprowadzając następujące ulepszenia:

  • Uproszczona obsługa uczestników rozmowy: Person jest używany do identyfikowania osób zaangażowanych w rozmowę, w tym awatary i identyfikatory URI. Wiele innych interfejsów API, takich jak addMessage() teraz użyj klasy Person zamiast CharSequence. Zajęcia: Person obsługuje też wzorzec projektowy konstruktora.

  • Obsługa obrazów: Android 9 wyświetla obrazy w powiadomieniach o wiadomościach na telefonach. Za pomocą setData() w wiadomości, aby wyświetlić obraz. Fragment kodu poniżej pokazuje, aby utworzyć obiekt Person i wiadomość zawierającą obraz.

Kotlin

// Create new Person.
val sender = Person()
        .setName(name)
        .setUri(uri)
        .setIcon(null)
        .build()
// Create image message.
val message = Message("Picture", time, sender)
        .setData("image/", imageUri)
val style = Notification.MessagingStyle(getUser())
        .addMessage("Check this out!", 0, sender)
        .addMessage(message)

Java

// Create new Person.
Person sender = new Person()
        .setName(name)
        .setUri(uri)
        .setIcon(null)
        .build();
// Create image message.
Message message = new Message("Picture", time, sender)
        .setData("image/", imageUri);
Notification.MessagingStyle style = new Notification.MessagingStyle(getUser())
        .addMessage("Check this out!", 0, sender)
        .addMessage(message);
  • Zapisuj odpowiedzi jako wersje robocze: aplikacja może pobierać EXTRA_REMOTE_INPUT_DRAFT wysyłanych przez system, gdy użytkownik przypadkowo zamknie powiadomienie o wiadomości. Możesz użyć tego dodatku, aby wstępnie wypełnić pola tekstowe w aplikacji, dokończyć jego odpowiedź.

  • Określanie, czy rozmowa jest rozmową grupową: za pomocą setGroupConversation() aby celowo określić wątek jako rozmowę grupową lub niegrupową.

  • Ustaw działanie semantyczne dla intencji: setSemanticAction() pozwala nadać działaniu semantyczne znaczenie, jako „oznacz jako przeczytane”, „usuń”, „odpowiedz”, i tak dalej.

  • SmartReply: Android 9 obsługuje te same sugerowane odpowiedzi, które są dostępne komunikator Używaj RemoteInput.setChoices() udostępniając użytkownikowi tablicę standardowych odpowiedzi.

Ustawienia kanału, komunikaty i tryb Nie przeszkadzać

Wprowadzono kanały powiadomień w Androidzie 8.0, który pozwala utworzyć . Android 9 upraszcza ustawienia kanału powiadomień, wprowadzając te zmiany:

  • Blokowanie grup kanałów: użytkownicy mogą teraz blokować całe grupy kanałów w ustawieniach powiadomień dotyczących aplikacji. Za pomocą isBlocked() pozwala określić, kiedy grupa jest blokowana i w efekcie nie wysyłać żadnych i powiadomienia z kanałów należących do tej grupy.

    Aplikacja może też wysyłać zapytania o aktualne ustawienia grupy kanałów za pomocą nowy getNotificationChannelGroup() .

  • Nowe typy intencji transmisji: system Android wysyła intencje transmisji gdy zmieni się stan blokowania kanałów powiadomień i grup kanałów. Aplikacja będąca właścicielem zablokowanego kanału lub grupy może nasłuchiwać tych intencji i odpowiednio zareagować. Aby uzyskać więcej informacji na temat tych działań i dodatków, znajdziesz na zaktualizowanej liście stałych w NotificationManager odwołania. Informacje o reagowaniu na intencje transmisji znajdziesz tutaj: Komunikaty.

  • NotificationManager.Policy ma 3 nowe kategorie priorytetowe Nie przeszkadzać:

  • NotificationManager.Policy ma też 7 nowych stałych narzędzia, za pomocą którego można wyłączyć powiadomienia wizualne:

Obsługa wielu kamer i aktualizacje dotyczące ich działania

Na urządzeniach z Androidem 9 możesz korzystać ze strumieni jednocześnie z co najmniej dwóch fizycznych . Na urządzeniach z podwójnym przednim lub podwójnym tylnym aparatem można tworzyć innowacyjnych funkcji, których brak w połączeniu z jednym aparatem, takich jak zoom, bokeh i obraz stereo. Interfejs API umożliwia też wywoływanie transmisji z kamery, która automatycznie przełącza się między co najmniej 2 kamerami.

Inne ulepszenia dotyczące aparatu to m.in. dodatkowa sesja które pomagają ograniczyć opóźnienia w pierwszej kolejności, oraz umożliwiają udostępnianie, klienty aparatów obsługują różne przypadki użycia bez konieczności zatrzymywania i uruchamiania obraz z kamery. Dodaliśmy również interfejsy API do obsługi środowiska Flash pomocy i dostęp do OIS sygnatury czasowe stabilizacji obrazu i efektów specjalnych na poziomie aplikacji.

W Androidzie 9 wielo aparatów Interfejs API obsługuje kamery monochromatyczne na urządzeniach FULL lub LIMITED. Wyjście monochromatyczne jest generowane za pomocą YUV_420_888 w formacie Y jako skali szarości, U (Cb) jako 128, a V (Cr) jako 128.

Android 9 umożliwia też obsługę zewnętrznych urządzeń USB/UVC kamery włączone obsługiwanych urządzeniach.

ImageDecoder do elementów rysowalnych i map bitowych

Android 9 wprowadza ImageDecoder , co zapewnia zmodernizowane podejście do dekodowania obrazów. Użyj tych zajęć zamiast BitmapFactory i BitmapFactory.Options API.

ImageDecoder umożliwia utworzenie Drawable lub Bitmap z bufora bajtów, pliku lub identyfikator URI. Aby zdekodować obraz, najpierw wywołaj createSource() ze źródłem zakodowanego obrazu. Następnie zadzwoń decodeDrawable() lub decodeBitmap() przez zaliczenie ImageDecoder.Source aby utworzyć obiekt Drawable lub Bitmap. Aby zmienić ustawienia domyślne, przekaż OnHeaderDecodedListener do decodeDrawable() lub decodeBitmap(). ImageDecoder połączenia onHeaderDecoded(). domyślną szerokością i wysokością obrazu, jeśli są one znane. Jeśli zakodowany obraz jest animowanym plikiem GIF lub WebP, decodeDrawable() zwraca Drawable, który jest instancją AnimatedImageDrawable. zajęcia.

Właściwości obrazu można ustawić na różne sposoby:

  • Aby przeskalować zdekodowany obraz do określonego rozmiaru, przekaż wymiary docelowe do setTargetSize() Możesz też skalować obrazy, używając próbki. Przekaż wielkość próbki bezpośrednio do: setTargetSampleSize()
  • Aby przyciąć obraz w zakresie skalowanego obrazu, wywołaj setCrop()
  • Aby utworzyć zmienną bitową, przekaż obiekt true do setMutableRequired()

ImageDecoder umożliwia też dodawanie do obrazu niestandardowych i skomplikowanych efektów takich jak zaokrąglone rogi, w postaci kół. Używaj setPostProcessor() z instancją PostProcessor do wykonywania dowolnych poleceń rysowania.

Animacja

Android 9 wprowadza AnimatedImageDrawable klasy do rysowania i wyświetlania animowanych obrazów GIF i WebP. AnimatedImageDrawable działa podobnie jak AnimatedVectorDrawable. w tym, że wątek renderowania napędza animacje obiektu AnimatedImageDrawable. Wątek renderowania również używa do dekodowania wątku roboczego, dzięki czemu dekodowanie nie skutkuje zakłócania innych operacji w wątku renderowania. Ta implementacja umożliwia wyświetlanie w aplikacji animowanego obrazu bez zarządzania jej aktualizacjami lub ingerencję w inne zdarzenia w wątku interfejsu aplikacji.

AnimatedImageDrawable można zdekodować za pomocą instancji ImageDecoder Poniżej fragment kodu pokazuje, jak za pomocą parametru ImageDecoder zdekodować AnimatedImageDrawable:

Kotlin

@Throws(IOException::class)
private fun decodeImage() {
    val decodedAnimation = ImageDecoder.decodeDrawable(
        ImageDecoder.createSource(resources, R.drawable.my_drawable))

    // Prior to start(), the first frame is displayed.
    (decodedAnimation as? AnimatedImageDrawable)?.start()
}

Java

private void decodeImage() throws IOException {
    Drawable decodedAnimation = ImageDecoder.decodeDrawable(
        ImageDecoder.createSource(getResources(), R.drawable.my_drawable));

    if (decodedAnimation instanceof AnimatedImageDrawable) {
        // Prior to start(), the first frame is displayed.
        ((AnimatedImageDrawable) decodedAnimation).start();
    }
}

ImageDecoder udostępnia kilka metod umożliwiających dalsze modyfikowanie obrazu. Na przykład możesz użyć atrybutu setPostProcessor() zmienić wygląd zdjęcia, na przykład zastosować okrągłą maskę lub lub zaokrąglonych rogów.

Wideo HDR VP9, kompresja obrazów HEIF i interfejsy Media API

Android 9 ma wbudowaną obsługę formatu High Dynamic Range (HDR) VP9 Profile 2, Dzięki temu możesz dostarczać użytkownikom filmy z obsługą HDR, z YouTube, Filmów Play, oraz z innych źródeł na urządzeniach obsługujących HDR.

Android 9 obsługuje też kodowanie obrazów z wykorzystaniem obrazów o wysokiej wydajności Format pliku (HEIF) lub HEIC), co zwiększa kompresję oraz zmniejsza ilość miejsca na dane i danych sieciowych i ich wykorzystaniu. Przykłady nieruchomych obrazów HEIF są obsługiwane w MediaMuxer i MediaExtractor zajęcia. Dzięki obsłudze platformy na urządzeniach z Androidem 9 możesz łatwo wysyłać używać obrazów HEIF z serwera backendu. Gdy upewnisz się, że atrybuty aplikacja jest zgodna z tym formatem danych do udostępniania i wyświetlania, wypróbuj HEIF jako format zapisu obrazów w aplikacji. możesz przekonwertować plik JPEG na heic; przy użyciu ImageDecoder lub BitmapFactory (która uzyskuje bitmapy z pliku JPEG). Następnie możesz użyć HeifWriter, aby zapisać HEIF nieruchome obrazy z buforów bajtowych YUV oraz przypadki Surface lub Bitmap.

Dane o multimediach są też dostępne w AudioTrack AudioRecord, i MediaDrm.

Android 9 wprowadza metody Klasa MediaDRM do pobierania danych, HDCP poziom bezpieczeństwa, liczbę sesji i większą kontrolę nad poziomymi zabezpieczeń i zabezpieczeniami. Zobacz różnice w interfejsie API .

W Androidzie 9 interfejs AAudio API dodaje obsługa kilku dodatkowych atrybutów AAudioStream, w tym użycia, treści, typ i gotowe wejście. Za pomocą tych atrybutów możesz tworzyć strumienie, do obsługi VoIP lub kamery. Identyfikator sesji możesz też ustawić jako powiązanie strumienia AAudio z submiksem, który może zawierać efekty. Użyj AudioEffect API do sterowania efekty.

Android 9 wprowadza Interfejs API AudioEffect dla przetwarzanie dynamiki. Dzięki tym lekcjom możesz tworzyć efekty dźwiękowe na kanale, w tym: korekcję, kompresję wielozakresową i ogranicznik – na wielu etapach. liczbę pasm i etapów aktywnych można skonfigurować, a większość parametrów można i kontrolowane w czasie rzeczywistym.

Poufność kosztów danych w harmonogramie zadań

Od Androida 9 JobScheduler może wykorzystać sygnały stanu sieci dostarczane przez operatorów do poprawy obsługi zadań związanych z siecią.

Zadania mogą zadeklarować szacowany rozmiar danych, sygnalizować wstępne pobieranie i określać szczegółowe wymagania dotyczące sieci. JobScheduler zarządza pracą zgodnie z stan sieci. Jeśli na przykład sieć sygnalizuje, że jest przeciążona, JobScheduler może opóźniać duże żądania sieciowe. Gdy na w sieci bez pomiaru, JobScheduler może uruchamiać zadania pobierania z wyprzedzeniem, poprawić wrażenia użytkowników, np. przez wstępne pobieranie nagłówków.

Przy dodawaniu zadań używaj narzędzia setEstimatedNetworkBytes(), setPrefetch(), i setRequiredNetwork() gdy jest to wskazane, aby pomóc JobScheduler wykonuje pracę prawidłowo. Gdy zadanie jest wykonywane, pamiętaj, aby użyć obiektu Network zwrócone przez JobParameters.getNetwork() W przeciwnym razie domyślnie skorzystasz z domyślnej sieci urządzenia, może nie spełniać Twoich wymagań, co spowoduje niezamierzone użycie danych.

Neural Networks API 1.1

Wprowadzono Neural Networks API. w Androidzie 8.1 (poziom interfejsu API 27) i przyspieszyć uczenie maszynowe na urządzeniu na urządzeniu z Androidem. Android 9 rozszerza i ulepsza interfejs API, dodając obsługę 9 nowych operacji:

Znany problem: Po zdaniu testu ANEURALNETWORKS_TENSOR_QUANT8_ASYMM tensorów do potęgi ANEURALNETWORKS_PAD jest dostępna w Androidzie 9 i nowszych, dane wyjściowe z NNAPI mogą nie być zgodne z danymi wyjściowymi maszyny wyższego poziomu struktury nauczania, takie jak TensorFlow Lite – Ty powinna zamiast tego przekazywać tylko ANEURALNETWORKS_TENSOR_FLOAT32 aż do rozwiązania problemu.

Dodatkowo interfejs API wprowadza nową funkcję, ANeuralNetworksModel_relaxComputationFloat32toFloat16() który pozwala określić, czy obliczać ANEURALNETWORKS_TENSOR_FLOAT32 z zakresem i precyzją równą 16-bitowej zmiennoprzecinkowemu IEEE 754 .

Platforma autouzupełniania

Android 9 wprowadza wiele ulepszeń dotyczących autouzupełniania usługi, które można wdrożyć, aby jeszcze bardziej zwiększyć wygodę użytkowników podczas wypełniania formularza formularzami. Aby dowiedzieć się więcej o korzystaniu z funkcji autouzupełniania w aplikacji, przeczytaj Przewodnik po platformie autouzupełniania.

Ulepszenia zabezpieczeń

Android 9 wprowadza szereg funkcji zabezpieczeń, które podsumowują te sekcje:

Zabezpieczone potwierdzenie w Androidzie

Na obsługiwanych urządzeniach z Androidem 9 lub nowszym możliwość korzystania z zabezpieczonego potwierdzenia w Androidzie. Podczas korzystania z tego procesu aplikacja wyświetla użytkownikowi prośbę o zatwierdzenie krótkiej informacji. To oświadczenie umożliwia aplikacji potwierdzenie, że użytkownik chce ukończyć poufne transakcje, takie jak dokonywanie płatności.

Jeśli użytkownik zaakceptuje instrukcję, magazyn kluczy Androida otrzyma i zapisze podpis kryptograficzny chroniony za pomocą mechanizmu uwierzytelniania wiadomości przy użyciu haszowania klucza. (HMAC). Gdy magazyn kluczy Androida potwierdzi poprawność wiadomości, aplikacja może użyć klucza wygenerowanego z usługi trustedConfirmationRequired w środowiska wykonawczego (TEE), aby podpisać wiadomość zaakceptowaną przez użytkownika. wskazuje z dużą pewnością, że użytkownik widział oświadczenia i użytkownik się na nie zaakceptował.

Uwaga: Bezpieczne potwierdzenie na Androidzie nie udostępnia bezpiecznego kanału informacyjnego użytkownika. Aplikacja nie może przyjąć żadnych gwarancje poufności wykraczające poza te zapewniane przez platformę Android. W nie należy używać tego procesu do wyświetlania poufnych informacji, nie były zazwyczaj wyświetlane na urządzeniu użytkownika.

Wskazówki dotyczące dodawania obsługi potwierdzenia w Androidzie znajdziesz tutaj: Ochrona Androida Potwierdzenie Google.

Okno ujednoliconego uwierzytelniania biometrycznego

W Androidzie 9 system wyświetla okna uwierzytelniania biometrycznego w imieniu Twojej aplikacji. Ta funkcja zapewnia ustandaryzowany wygląd, styl i umiejscowienie co daje użytkownikom większą pewność, że zgadzają się zaufanego narzędzia do sprawdzania danych biometrycznych.

Jeśli aplikacja używa FingerprintManager aby wyświetlić użytkownikom okno uwierzytelniania odciskiem palca, przełącz się na używanie BiometricPrompt . Do wyświetlania uwierzytelniania BiometricPrompt używa systemu . Zmienia się również sposób działania, aby dostosować się do typu biometrii wybrane przez użytkownika.

Sprzętowy moduł zabezpieczeń

Obsługiwane urządzenia z Androidem 9 lub nowszym mogą mają StrongBox Keymaster, czyli implementację interfejsu HAL Keymaster, znajduje się w sprzętowym module zabezpieczeń. Moduł obejmuje:

  • Ma własny procesor.
  • Bezpieczne miejsce na dane.
  • Prawdziwy generator liczb losowych.
  • Dodatkowe mechanizmy zapobiegające manipulacjom i nieautoryzowanym instalowaniu pakietów aplikacji.

Podczas sprawdzania kluczy przechowywanych w StrongBox Keymaster systemie system potwierdza jego integralność w Trusted Execution Environment (TEE).

Aby dowiedzieć się więcej o korzystaniu z narzędzia Strongbox Keymaster, zobacz artykuł na temat zabezpieczeń sprzętu Moduł.

Bezpieczne importowanie kluczy do magazynu kluczy

Android 9 zapewnia dodatkowe zabezpieczenie odszyfrowywania kluczy przez dodanie aby bezpiecznie importować zaszyfrowane klucze do magazynu kluczy za pomocą Format klucza z kodowaniem ASN.1. Następnie Keymaster odszyfruje klucze w Magazyn kluczy, dzięki czemu zawartość kluczy nigdy nie jest wyświetlana jako zwykły tekst w pamięci hosta urządzenia.

Dowiedz się więcej o importowaniu zaszyfrowanych kluczy bezpieczeństwa.

Schemat podpisu pliku APK z rotacją klucza

Android 9 obsługuje schemat podpisu plików APK w wersji 3. Ten schemat ma opcję do umieszczenia w bloku podpisywania dokumentu potwierdzenia rotacji za każdym razem, certyfikat. Ta funkcja umożliwia podpisywanie aplikacji nowym podpisywaniem certyfikat, łącząc poprzednie certyfikaty podpisywania pliku APK z certyfikatem który został podpisany.

Więcej informacji o wykonywaniu rotacji kluczy za pomocą apksigner

Opcja zezwalania na odszyfrowywanie klucza tylko na odblokowanych urządzeniach

W Androidzie 9 wprowadzono flagę unlockedDeviceRequired. Ta opcja określa, czy magazyn kluczy wymaga odblokowania ekranu przed zezwoleniem; odszyfrowywanie jakichkolwiek trwających lub zapisanych danych przy użyciu określonego klucza; Typy te kluczy dobrze nadaje się do szyfrowania danych wrażliwych i przechowywanych na dysku, takich jak danych dotyczących zdrowia lub firmowych danych. Ta flaga daje użytkownikom większą pewność, że w przypadku utraty telefonu nie można odszyfrować danych, gdy urządzenie jest zablokowane lub skradzione.

Aby klucz nie został odszyfrowany, gdy urządzenie jest zablokowane, włącz flagę przekazując true do funkcji setUnlockedDeviceRequired() . Po wykonaniu tej czynności i zablokowaniu ekranu próba odszyfrowania lub podpisania danych przy użyciu tego klucza zakończy się niepowodzeniem. Zablokowane urządzenie wymaga: kod PIN, hasło, odcisk palca lub inny zaufany czynnik dostęp.

Obsługa starszych wersji szyfrowania

Urządzenia z Androidem 9 dostarczane z systemem Keymaster 4 obsługują dane potrójne Encryption Algorithm, czyli Triple DES, Jeśli aplikacja współpracuje ze starszą wersją systemów wymagających potrójnego DES, użyj tego rodzaju szyfrowania danych logowania.

Więcej informacji o tym, jak zwiększyć bezpieczeństwo aplikacji, znajdziesz w artykule Bezpieczeństwo na Androidzie Programistów.

Wycofanie WPS

Ze względów bezpieczeństwa wycofaliśmy WPS (Wi-Fi Protected Setup).

Kopie zapasowe Androida

Android 9 dodaje nowe funkcje i opcje dla deweloperów związane w celu utworzenia i przywrócenia kopii zapasowej. Szczegółowe informacje o tych zmianach znajdziesz w dalszej części tego artykułu. sekcji.

Kopie zapasowe szyfrowania po stronie klienta

W Androidzie 9 dodano obsługę szyfrowania kopii zapasowych Androida za pomocą po stronie klienta. Ta funkcja jest włączona automatycznie, gdy: są spełnione warunki:

Gdy te zabezpieczenia są włączone, kod PIN, wzór lub hasło urządzenia jest jest wymagane do przywrócenia danych z kopii zapasowych utworzonych przez urządzenie użytkownika. Aby się uczyć więcej informacji o technologii kryjącej się za tę funkcję znajdziesz w artykule Google Cloud Key Vault dokument na temat usługi.

Określ warunki urządzenia wymagane do utworzenia kopii zapasowej

Jeśli dane aplikacji zawierają poufne informacje lub ustawienia, Android 9 pozwala zdefiniować urządzenie , w których przypadku gdy dane aplikacji są uwzględniane w kopii zapasowej użytkownika, np. gdy dane po stronie klienta włączone jest szyfrowanie lub jest przeprowadzany lokalny transfer między urządzeniami.

Aby dowiedzieć się więcej o tworzeniu kopii zapasowej danych na urządzeniach z Androidem, przeczytaj artykuł Dane Omówienie kopii zapasowych.

Ułatwienia dostępu

Android 9 wprowadza ulepszenia ułatwień dostępu które ułatwiają udostępnianie użytkownikom do aplikacji.

Semantyka nawigacji

Atrybuty dodane w Androidzie 9 ułatwiają określanie, usługi ułatwień dostępu, zwłaszcza czytniki ekranu, przechodzą z jednej części do innego ekranu. Te atrybuty mogą pomóc użytkownikom z wadą wzroku szybko poruszać się po tekście w interfejsie aplikacji i umożliwiać dokonanie wyboru.

Na przykład w aplikacji zakupowej czytnik ekranu może ułatwić użytkownikom nawigację z jednej kategorii ofert do kolejnej, bez czytnika ekranu czytanie wszystkich elementów w danej kategorii przed przejściem do następnej.

Tytuły paneli ułatwień dostępu

W Androidzie 8.1 (poziom interfejsu API 27) i starszych wersjach usługi ułatwień dostępu nie zawsze określać, kiedy określony panel ekranu został zaktualizowany, na przykład kiedy aktywność zastępuje jeden fragment innym fragmentem. Panele składają się z: logicznie pogrupowane, powiązane wizualnie elementy interfejsu, które zwykle składają się fragment.

W Androidzie 9 możesz określać tytuły paneli ułatwień dostępu, a także pojedynczo łatwe do zidentyfikowania tytuły. Jeśli panel ma tytuł panelu ułatwień dostępu, usługi ułatwień dostępu otrzymują bardziej szczegółowe informacje po zmianie panelu. Ta funkcja umożliwia usługom dostarczanie użytkownikowi bardziej szczegółowych informacji o zmianach w interfejsie.

Aby podać tytuł panelu, użyj android:accessibilityPaneTitle . Możesz też zaktualizować tytuł panelu interfejsu, który zostanie zastąpiony na stronie w środowisku wykonawczym, wykorzystując setAccessibilityPaneTitle(). Możesz na przykład podać tytuł obszaru treści witryny, Fragment.

Nawigacja w oparciu o nagłówek

Jeśli aplikacja wyświetla zawartość tekstową z logicznymi nagłówkami, ustaw parametr android:accessibilityHeading atrybut do true w przypadku wystąpień View reprezentujące te nagłówki. Według dodając te nagłówki, zezwolisz usługom ułatwień dostępu na pomoc w nawigacji bezpośrednio z jednego nagłówka do następnego. Tego ustawienia może używać każda usługa ułatwień dostępu oraz usprawnianiem działań użytkowników Interfejs użytkownika.

Nawigacja w grupie i dane wyjściowe

Czytniki ekranu tradycyjnie używają android:focusable do określić, kiedy powinni przeczytać ViewGroup lub zbiór View obiektów jako pojedynczą jednostkę. Dzięki temu użytkownicy mogli zrozumieć, że wyświetlenia są ze sobą logicznie powiązane.

W Androidzie 8.1 i starszych musisz zaznaczyć każdy obiekt View ViewGroup jako bez możliwości zaznaczenia, a sam ViewGroup jako możliwy do zaznaczenia. Ten rozmieszczenie sprawiło, że niektóre wystąpienia obiektu View zostały oznaczone jako możliwe do zaznaczenia w taki sposób, korzystanie z nawigacji za pomocą klawiatury stało się niewygodne.

Począwszy od Androida 9 możesz używać android:screenReaderFocusable zamiast atrybutu android:focusable w sytuacjach, gdy ustawienie obiektu View jako możliwego do zaznaczenia ma niepożądane konsekwencje. Czytniki ekranu umieść zaznaczenie na wszystkich elementach, które ustawiły android:screenReaderFocusable lub android:focusable do true.

Działania wygodne

W Androidzie 9 można jeszcze wygodniej wykonywać działania w imieniu użytkowników:

Interakcja z etykietkami
Nowe funkcje ułatwień dostępu dają Ci dostęp do: etykietek w interfejsie aplikacji. Używaj getTooltipText() aby odczytać tekst etykietki, i użyj ACTION_SHOW_TOOLTIP i ACTION_HIDE_TOOLTIP aby instruować instancje View, aby wyświetlały lub ich etykietki.
Dodane działania globalne
Android 9 wprowadza obsługę 2 dodatkowych działań w aplikacji AccessibilityService. zajęcia. Twoja usługa może pomóc użytkownikom blokować urządzenia i robić zrzuty ekranu za pomocą GLOBAL_ACTION_LOCK_SCREEN i GLOBAL_ACTION_TAKE_SCREENSHOT działań.

Szczegóły zmiany okna

Android 9 ułatwia śledzenie aktualizacji okien aplikacji, gdy aplikacja powoduje ponowne zaznaczenie wielu okien jednocześnie. Gdy TYPE_WINDOWS_CHANGED zachodzi zdarzenie, użyj funkcji getWindowChanges() API w celu określenia, jak zmieniły się okna. Podczas aktualizacji w trybie wielu okien każde generuje własny zestaw zdarzeń. getSource() zwraca widok główny okna powiązanego z każdym zdarzeniem.

Jeśli aplikacja ma zdefiniowane tytuły panelu ułatwień dostępu dla swojej obiekty View, które usługa może rozpoznać. gdy interfejs aplikacji jest aktualizowany. Gdy TYPE_WINDOW_STATE_CHANGED użyj typów zwróconych przez getContentChangeTypes() aby określić, jak zmieniło się okno. Platforma może na przykład wykrywa, czy panel ma nowy tytuł lub czy panel zniknął.

Obrót

Aby wyeliminować niezamierzone obroty, dodaliśmy tryb przypinania nawet jeśli położenie urządzenia się zmieni. Użytkownicy mogą aktywować rotację ręcznie, klikając przycisk na pasku systemowym.

W większości przypadków wpływ na zgodność aplikacji jest niewielki. Jeśli jednak aplikacja ma niestandardowe obrót lub używa nietypowej orientacji ekranu; mogą pojawić się problemy, które wcześniej nie były zauważone, ustawienie rotacji użytkowników zawsze było ustawione pionowo. Zachęcamy do przyjrzyj się rotacji wszystkich kluczowych działań w aplikacji i upewnij się, Upewnij się, że wszystkie ustawienia orientacji ekranu i optymalnie korzystać z urządzenia.

Szczegółowe informacje znajdziesz w powiązanym działaniu zmian.

Obrót urządzenia mobilnego z wyświetlonym nowym trybem rotacji, który umożliwia użytkownikom ręczne uruchamianie rotacji

Nowy tryb rotacji umożliwia użytkownikom w razie potrzeby ręczne aktywowanie rotacji za pomocą przycisku na pasku systemowym.

Tekst

Android 9 wprowadza te funkcje związane z tekstem platforma:

  • Wstępnie obliczony tekst: PrecomputedText – zajęcia na poprawę i renderowania tekstu, dzięki czemu można obliczać i buforować wymagane informacji z wyprzedzeniem. Pozwala też aplikacji wyłączyć układ tekstu w wątku głównym.

  • Lupa: klasa Magnifier to widżet na platformie udostępnia interfejs API powiększania, który pozwala we wszystkich aplikacjach.

  • Smart Linkify: Android 9 TextClassifier zajęcia, który wykorzystuje systemy uczące się do identyfikowania elementów w zaznaczonym tekście sugerowanie działań. Na przykład TextClassifier może umożliwić aplikacji wykrywanie że użytkownik wybrał numer telefonu. Aplikacja może wtedy zasugerować, że użytkownik dzwoni za pomocą tego numeru. Funkcje dostępne w TextClassifier zastąp funkcjonalność klasy Linkify.

  • Układ tekstu: kilka wygodnych metod i atrybutów ułatwia wdrożyć projekt interfejsu użytkownika. Szczegółowe informacje znajdziesz w dokumentacji referencyjnej dotyczącej TextView

Wcześniejsza konwersja plików DEX w ART

Na urządzeniach z Androidem 9 lub nowszym środowisko wykonawcze Androida Kompilator (ART) wyprzedzający dalszą optymalizację skompresowanego pliku wykonywalnego Dalvik plików DEX, konwertując pliki DEX w pakiecie aplikacji na kompaktową reprezentacją. Ta zmiana umożliwia szybsze uruchamianie aplikacji i korzystanie z niej mniej miejsca na dysku i pamięci RAM.

To ulepszenie dotyczy zwłaszcza urządzeń niskiej klasy z wolniejszym wejściem/wyjściem dysku Szybkość działania.

Śledzenie systemu na urządzeniu

Android 9 pozwala zapisywać ślady systemu z urządzenia, a następnie udostępnij swojemu zespołowi programistów raport o tych nagraniach. Ten raport obsługują wiele formatów, w tym HTML.

Dzięki zbieraniu tych logów czasu możesz rejestrować dane o czasie związane z procesów i wątków oraz wyświetlanie innych typów urządzeń istotnych globalnie stanów.

Aby dowiedzieć się więcej o tym narzędziu, przeczytaj sekcję Wykonywanie na urządzeniu .