Funkcje i interfejsy API – przegląd

Android 13 wprowadza nowe, świetne funkcje i interfejsy API dla deweloperów. W sekcjach poniżej znajdziesz informacje o funkcjach aplikacji i dowiesz się, jak zacząć korzystać z powiązanych interfejsów API.

Szczegółową listę nowych, zmodyfikowanych i usuniętych interfejsów API znajdziesz w raporcie różnic w interfejsie API. Szczegółowe informacje o nowych interfejsach API znajdziesz w dokumentacji API Androida – nowe interfejsy API są wyróżnione, aby były lepiej widoczne. Aby dowiedzieć się, w jakich obszarach zmiany na platformie mogą wpłynąć na Twoje aplikacje, zapoznaj się ze zmianami w działaniu Androida 13 w przypadku aplikacji kierowanych na Androida 13 i wszystkich aplikacji.

Produktywność i narzędzia dla programistów

Ikony aplikacji zgodne z wybranym motywem

Użytkownik włącza ikony aplikacji zgodne z wybranym motywem
Włączanie ikon aplikacji z motywem na Androidzie 13

Od Androida 13 możesz wyrazić zgodę na używanie ikon aplikacji z motywem. Dzięki tej funkcji ikony aplikacji w obsługiwanych programach uruchamiających na Androidzie są zabarwione, aby odzwierciedlać kolorystykę wybranej przez użytkownika tapety i innych motywów.

Aby obsługiwać tę funkcję, aplikacja musi mieć zarówno ikonę adaptacyjną, jak i monochromatyczną ikonę aplikacji, oraz wskazywać na monochromatyczną ikonę aplikacji z elementu <adaptive-icon> w pliku manifestu. Jeśli użytkownik włączył ikony aplikacji z motywem (czyli włączył przełącznik Ikony z motywem w ustawieniach systemu), a program uruchamiający obsługuje tę funkcję, system używa kolorystyki wybranej przez użytkownika tapety i motywu, aby określić kolor odcienia, który następnie stosuje do monochromatycznej ikony aplikacji.

Ekran główny NIE wyświetla ikony aplikacji z motywem, ale wyświetla ikonę adaptacyjną lub standardową w tych sytuacjach:

  • Jeśli użytkownik nie włączył ikon aplikacji z motywem
  • Jeśli aplikacja nie ma ikony monochromatycznej
  • Jeśli program uruchamiający nie obsługuje ikon aplikacji z motywem

Więcej informacji i instrukcji znajdziesz w artykule Ikony adaptacyjne.

Wybór języka według aplikacji

Języki poszczególnych aplikacji w ustawieniach systemu

W wielu przypadkach użytkownicy wielojęzyczni ustawiają język systemu na jeden język, np. angielski, ale chcą wybrać inne języki dla konkretnych aplikacji, np. niderlandzki, chiński lub hindi. Aby ułatwić aplikacjom zapewnianie lepszych wrażeń tym użytkownikom, Android 13 wprowadza te funkcje w aplikacjach obsługujących wiele języków:

  • Ustawienia systemowe: scentralizowane miejsce, w którym użytkownicy mogą wybrać preferowany język dla każdej aplikacji.

    Aplikacja musi zadeklarować atrybut android:localeConfig w pliku manifestu, aby poinformować system, że obsługuje wiele języków. Więcej informacji znajdziesz w instrukcjach tworzenia pliku zasobów i deklarowania go w pliku manifestu aplikacji.

  • Dodatkowe interfejsy API: te publiczne interfejsy API, takie jak metody setApplicationLocales() i getApplicationLocales() w LocaleManager, umożliwiają aplikacjom ustawianie w czasie działania języka innego niż język systemu.

    Te interfejsy API automatycznie synchronizują się z ustawieniami systemowymi, dzięki czemu aplikacje, które używają tych interfejsów do tworzenia niestandardowych selektorów języka w aplikacji, zapewniają użytkownikom spójne działanie niezależnie od tego, gdzie wybierają ustawienia języka. Publiczne interfejsy API pomagają też zmniejszyć ilość powtarzalnego kodu, obsługują dzielone pakiety APK i automatyczne kopie zapasowe aplikacji, aby przechowywać ustawienia języka użytkownika na poziomie aplikacji.

    Aby zapewnić zgodność wsteczną z poprzednimi wersjami Androida, w AndroidX dostępne są też równoważne interfejsy API. Zalecamy używanie interfejsów API dodanych w Appcompat 1.6.0-beta01 lub nowszej wersji.

Te zmiany nie mają wpływu na aplikacje, które nie obsługują wielu języków.

Ulepszona obsługa tekstu i języków

Android 13 zawiera kilka ulepszeń dotyczących tekstu i języka, które pomagają zapewnić lepsze wrażenia użytkownikom. Opisujemy je w tych sekcjach:

Szybsze dzielenie wyrazów

Przenoszenie wyrazów ułatwia czytanie zawijanego tekstu i sprawia, że interfejs jest bardziej elastyczny. Począwszy od Androida 13, wydajność przenoszenia wyrazów została zoptymalizowana nawet o 200%, dzięki czemu możesz włączyć tę funkcję w TextView, nie wpływając prawie wcale na wydajność renderowania. Aby przyspieszyć przenoszenie wyrazów, użyj częstotliwości fullFast lub normalFast w setHyphenationFrequency().

Interfejsy API do konwersji tekstu

Osoby posługujące się językami takimi jak japoński i chiński używają metod wprowadzania znaków fonetycznych, co często spowalnia wyszukiwanie i funkcje takie jak autouzupełnianie. W Androidzie 13 aplikacje mogą wywoływać nowy interfejs API do konwersji tekstu, dzięki czemu użytkownicy mogą szybciej i łatwiej znaleźć to, czego szukają. Wcześniej, aby wyszukać na przykład „pociąg z Tokio do Kioto”,

  1. wpisują hiraganę jako wymowę fonetyczną wyszukiwanego hasła (np. nazwy miejsca lub aplikacji),
  2. Używanie klawiatury do konwertowania znaków hiragany na kanji
  3. Wyszukaj ponownie, używając znaków kanji.
  4. wyświetlić wyniki wyszukiwania.

Dzięki nowemu interfejsowi API do konwersji tekstu japońscy użytkownicy mogą wpisywać tekst w hiraganie i od razu widzieć wyniki wyszukiwania w kanji, pomijając kroki 2 i 3.

Ulepszone wysokości wierszy w przypadku skryptów innych niż łacińskie

Android 13 ulepsza wyświetlanie skryptów innych niż łacińskie (takich jak tamilski, birmański, telugu i tybetański) dzięki zastosowaniu wysokości wiersza dostosowanej do każdego języka. Nowe wysokości wierszy zapobiegają przycinaniu i poprawiają pozycjonowanie znaków. Twoja aplikacja może korzystać z tych ulepszeń, jeśli jest kierowana na Androida 13. Przetestuj swoje aplikacje z nowymi odstępami między wierszami, ponieważ zmiany mogą wpłynąć na interfejs w językach innych niż łacińskie.

Wysokości linii, które były przycinane w Androidzie 12 (powyżej), są teraz lepiej pozycjonowane i nie są przycinane w Androidzie 13 (poniżej).

Ulepszone zawijanie tekstu w języku japońskim

Począwszy od Androida 13, TextViews mogą zawijać tekst według Bunsetsu (najmniejszej jednostki słów, która brzmi naturalnie) lub fraz, a nie według znaków, co pozwala na tworzenie bardziej dopracowanych i czytelnych aplikacji w języku japońskim. Możesz skorzystać z tego zawijania, używając android:lineBreakWordStyle="phrase" z TextViews.

Zawijanie tekstu w języku japońskim z włączonym stylem frazy (poniżej) i bez niego (powyżej).

Aktualizacje biblioteki Unicode

Android 13 zawiera najnowsze ulepszenia, poprawki i zmiany, które są częścią Unicode ICU 70, Unicode CLDR 40 i Unicode 14.0.

Oto kilka istotnych zmian:

  • Jeśli nie ma dostępnych zasobów tłumaczeniowych, w przypadku języka angielskiego (Kanada) en‑CA i angielskiego (Filipiny) en‑PH używane są zasoby tłumaczeniowe języka angielskiego (Stany Zjednoczone) en, a nie angielskiego (Wielka Brytania) en‑GB.
  • many Wprowadzono kategorię liczby mnogiej dla języków: hiszpański es, włoski it, portugalski pt i portugalski (Portugalia) pt‑PT. Podobnie jak w przypadku języka francuskiego wprowadzonego w CLDR w wersji 38, jest on używany w przypadku dużych liczb.

Kolorowe czcionki wektorowe

Emotikon wektorowy COLRv1 (po lewej) i emotikon bitmapowy (po prawej)

Od Androida 13 system obsługuje renderowanie czcionek COLR w wersji 1 (COLRv1) i aktualizuje emotikony systemowe do formatu COLRv1. COLRv1 to bardzo kompaktowy format czcionki, który szybko i wyraźnie renderuje się w każdym rozmiarze.

W przypadku większości aplikacji system obsługuje wszystko, a COLRv1 po prostu działa. Jeśli jednak aplikacja implementuje własne renderowanie tekstu i używa czcionek systemowych, zalecamy przetestowanie renderowania emotikonów.

Więcej informacji o COLRv1 znajdziesz w tych materiałach:

Interfejs API do umieszczania w Szybkich ustawieniach

Szybkie ustawienia w obszarze powiadomień to wygodny sposób na zmianę ustawień lub wykonywanie szybkich działań bez opuszczania aplikacji. W przypadku aplikacji, które udostępniają niestandardowe kafelki, ułatwiamy użytkownikom odkrywanie i dodawanie kafelków do Szybkich ustawień. Dzięki nowemu interfejsowi API do umieszczania kafelków aplikacja może teraz poprosić użytkownika o bezpośrednie dodanie niestandardowego kafelka do zestawu aktywnych kafelków Szybkich ustawień. Nowe okno systemowe umożliwia użytkownikowi dodanie kafelka w jednym kroku, bez opuszczania aplikacji, zamiast przechodzenia do Szybkich ustawień w celu dodania kafelka.

Okno z pytaniem, czy użytkownik chce dodać kafelek do Szybkich ustawień.

Podgląd schowka

Począwszy od Androida 13, system wyświetla standardowe wizualne potwierdzenie, gdy treść zostanie dodana do schowka. Nowe potwierdzenie:

  • Potwierdza, że treść została skopiowana.
  • Wyświetla podgląd skopiowanych treści.

Ta funkcja ujednolica różne powiadomienia wyświetlane przez aplikacje po skopiowaniu i zapewnia użytkownikom większą kontrolę nad schowkiem. Więcej informacji znajdziesz na stronie funkcji Kopiuj i wklej.

Widżet kopiowania i wklejania
Nowy interfejs wyświetlany, gdy treść trafia do schowka.

Gest przewidywanego przejścia wstecz

Android 13 wprowadza gest przewidywanego przejścia wstecz na urządzeniach z Androidem, takich jak telefony, urządzenia z dużym ekranem i urządzenia składane. Aby obsługiwać tę funkcję, musisz zaktualizować aplikację.

Szczegółowe informacje znajdziesz w artykule Aktualizowanie aplikacji, aby obsługiwała gest przewidywanego przejścia wstecz. Możesz też wypróbować nasze ćwiczenia z programowania.

Bluetooth LE Audio

Low Energy (LE) Audio to bezprzewodowy protokół audio, który ma zastąpić klasyczny Bluetooth i umożliwić korzystanie z określonych przypadków użycia i topologii połączeń. Umożliwia użytkownikom udostępnianie i transmitowanie dźwięku znajomym i rodzinie oraz subskrybowanie publicznych transmisji w celach informacyjnych, rozrywkowych lub związanych z ułatwieniami dostępu. Został zaprojektowany tak, aby użytkownicy mogli odbierać dźwięk o wysokiej jakości bez skracania czasu pracy na baterii i płynnie przełączać się między różnymi przypadkami użycia, które nie są możliwe w przypadku klasycznego Bluetooth. Począwszy od Androida 13 system zawiera wbudowaną obsługę LE Audio, dzięki czemu deweloperzy mogą bezpłatnie korzystać z tych funkcji na zgodnych urządzeniach.

MIDI 2.0

Od Androida 13 system obsługuje standard MIDI 2.0, w tym możliwość podłączania sprzętu MIDI 2.0 przez USB. Ten standard oferuje takie funkcje jak zwiększona rozdzielczość kontrolerów, lepsza obsługa intonacji spoza kręgu zachodniego i bardziej ekspresyjne wykonanie dzięki kontrolerom dla poszczególnych nut.

Ulepszenia wydajności ekranu powitalnego

Android 13 zwiększa wydajność animowanych ekranów powitalnych w interfejsie Splash Screen API:

  • System określa czas trwania animacji bezpośrednio na podstawie AnimatedVectorDrawable. W wersjach starszych niż Android 13 konieczne było bezpośrednie ustawienie windowSplashScreenAnimationDuration.

  • Użyj nowego atrybutu windowSplashScreenBehavior, aby mieć większą kontrolę nad tym, czy aplikacja zawsze wyświetla ikonę na ekranie powitalnym w Androidzie 13 lub nowszym.

Szczegółowe informacje znajdziesz w artykule Ekrany powitalne.

Optymalizacje ART

W Androidzie 13 (API na poziomie 33) i nowszych ART znacznie przyspiesza przełączanie się na kod natywny i z powrotem, dzięki czemu wywołania JNI są teraz nawet 2, 5 razy szybsze. Przetwarzanie odwołań do środowiska wykonawczego również zostało zmienione, aby było w większości nieblokujące, co dodatkowo zmniejsza zacinanie się. Możesz też używać publicznego interfejsu API Reference.refersTo(), aby szybciej odzyskiwać nieosiągalne obiekty. Zauważysz też, że interpreter działa teraz szybciej dzięki zoptymalizowanemu wyszukiwaniu klas i metod. ART przeprowadza też więcej weryfikacji kodu bajtowego podczas instalacji, co pozwala uniknąć kosztów weryfikacji w czasie działania i zapewnia szybkie uruchamianie aplikacji.

Prywatność i bezpieczeństwo

Bezpieczniejsze eksportowanie odbiorców zarejestrowanych w kontekście

Aby zwiększyć bezpieczeństwo odbiorników w czasie działania, Android 13 wprowadza możliwość określenia przez aplikację, czy zarejestrowany odbiornik powinien być eksportowany i widoczny dla innych aplikacji na urządzeniu. W poprzednich wersjach Androida każda aplikacja na urządzeniu mogła wysyłać niechronione komunikaty do dynamicznie zarejestrowanego odbiorcy, chyba że był on chroniony przez uprawnienie do podpisu.

Ta konfiguracja eksportowania jest dostępna w aplikacjach, które wykonują co najmniej jedną z tych czynności:

Selektor zdjęć

Android 13 (poziom API 33) i nowsze wersje zawierają selektor zdjęć. Gdy aplikacja uruchamia selektor zdjęć, użytkownicy wybierają konkretne obrazy i filmy, które chcą udostępnić aplikacji, np. zdjęcia profilowe, zamiast przyznawać jej dostęp do całej biblioteki multimediów. Jest to zalecany sposób uzyskiwania dostępu do zdjęć i filmów użytkownika.

Selektor zdjęć zapewnia użytkownikom większą prywatność, ponieważ aplikacja nie musi deklarować żadnych uprawnień w czasie działania. Ponadto selektor zdjęć zapewnia wbudowany, ustandaryzowany interfejs aplikacji, który zapewnia użytkownikom bardziej spójne wrażenia.

Nowe uprawnienia w czasie działania aplikacji dotyczące urządzeń Wi-Fi w pobliżu

Android 13 (poziom API 33) wprowadza nowe uprawnienia w czasie działania w grupie uprawnień NEARBY_DEVICES dla aplikacji, które zarządzają połączeniami urządzenia z punktami dostępu w pobliżu przez Wi-Fi. Te aplikacje muszą zadeklarować nowe uprawnienie NEARBY_WIFI_DEVICES, gdy wywołują kilka różnych interfejsów API Wi-Fi. Oprócz tego, jeśli aplikacje nie określają fizycznej lokalizacji na podstawie interfejsów API Wi-Fi, nie muszą deklarować uprawnienia ACCESS_FINE_LOCATION, gdy są kierowane na Androida 13 lub nowszego.

Dowiedz się więcej o uprawnieniach do urządzeń Wi-Fi w pobliżu.

Nowe uprawnienie dotyczące alarmów precyzyjnych

Jeśli Twoja aplikacja jest kierowana na Androida 13 lub nowszego, możesz używać uprawnienia USE_EXACT_ALARM, które jest automatycznie przyznawane aplikacji. Aby jednak aplikacja mogła korzystać z tego uprawnienia, musi spełniać co najmniej jedno z tych kryteriów:

  • Aplikacja jest budzikiem lub minutnikiem.
  • Twoja aplikacja to kalendarz, który wyświetla powiadomienia o nadchodzących wydarzeniach.

Jeśli aplikacja ustawia alarmy precyzyjne, ale nie spełnia żadnego z warunków wymienionych na poprzedniej liście, nadal deklaruj uprawnienie SCHEDULE_EXACT_ALARM i przygotuj się na sytuację, w której użytkownik odmówi dostępu do aplikacji.

Deweloperska opcja obniżania uprawnień

Od Androida 13 aplikacja może unieważniać dostęp do nieużywanych uprawnień w czasie działania. Ten interfejs API umożliwia aplikacji wykonywanie zadań zwiększających ochronę prywatności, takich jak:

  • Usuń nieużywane uprawnienia.
  • Przestrzegaj sprawdzonych metod dotyczących uprawnień, aby zwiększyć zaufanie użytkowników. Możesz rozważyć wyświetlenie użytkownikom okna z uprawnieniami, które zostały przez Ciebie proaktywnie unieważnione.

Schemat podpisywania plików APK w wersji 3.1

Android 13 obsługuje schemat podpisu plików APK w wersji 3.1, który ulepsza dotychczasowy schemat podpisu plików APK w wersji 3. Ten schemat rozwiązuje niektóre znane problemy ze schematem podpisywania plików APK w wersji 3 dotyczące rotacji. W szczególności schemat podpisu w wersji 3.1 obsługuje kierowanie na wersję pakietu SDK, co umożliwia rotację w celu kierowania na późniejszą wersję platformy.

Schemat podpisu w wersji 3.1 używa identyfikatora bloku, który nie jest rozpoznawany w systemie 12L ani starszym. Dlatego platforma stosuje następujące zachowanie podpisu:

  • Urządzenia z Androidem 13 lub nowszym używają obróconego podpisu w bloku v3.1.
  • Urządzenia ze starszymi wersjami Androida ignorują zmieniony podpis i używają oryginalnego podpisu w bloku 3.0.

W przypadku aplikacji, które nie przeszły jeszcze rotacji klucza podpisywania, nie trzeba podejmować żadnych dodatkowych działań. Gdy te aplikacje zdecydują się na rotację, system domyślnie zastosuje schemat podpisu w wersji 3.1.

Aplikacje, które już przeszły rotację i chcą nadal używać zmienionego klucza podpisywania w bloku podpisywania w wersji 3.0, muszą zaktualizować wywołanie apksigner:

apksigner sign --ks keystore.jks |
  --key key.pk8 --cert cert.x509.pem
  --rotation-min-sdk-version API_LEVEL
  [signer_options] app-name.apk

…gdzie API_LEVEL to 32 lub mniej.

Ulepszone raportowanie błędów w Magazynie kluczy i KeyMint

W przypadku aplikacji, które generują klucze, Keystore i KeyMint podają teraz bardziej szczegółowe i dokładne wskaźniki błędów. Dodaliśmy hierarchię klas wyjątków w java.security.ProviderException z wyjątkami dotyczącymi Androida, które obejmują kody błędów Keystore/KeyMint i informacje o tym, czy błąd można ponowić. Możesz też zmodyfikować metody generowania i używania kluczy (podpisywanie, szyfrowanie), aby zgłaszać nowe wyjątki. Ulepszone raportowanie błędów nie ogranicza się do generowania kluczy i powinno teraz dostarczać informacji potrzebnych do ponownego wygenerowania klucza.

Obsługa tabletów i dużych ekranów

Android 13 bazuje na optymalizacjach pod kątem tabletów wprowadzonych w Androidzie 12 i w pakiecie nowych funkcji 12L, w tym na optymalizacjach interfejsu systemu, lepszej wielozadaniowości i ulepszonych trybach zgodności. W ramach testów upewnij się, że aplikacje wyglądają dobrze na tabletach i innych urządzeniach z dużym ekranem.

Więcej informacji o nowościach i funkcjach do przetestowania znajdziesz na stronie Obsługa tabletów i dużych ekranów.

Grafika

Programowalne shadery

Animowany obiekt cieniujący AGSL, dostosowany na podstawie tego obiektu cieniującego GLSL.

Począwszy od Androida 13 system obsługuje programowalne obiekty RuntimeShader, których zachowanie jest definiowane za pomocą języka Android Graphics Shading Language (AGSL). AGSL ma wiele wspólnego ze składnią GLSL, ale działa w ramach mechanizmu renderowania Androida, aby dostosowywać renderowanie w ramach obszaru roboczego Androida oraz filtrowanie zawartości widoku. Android wewnętrznie używa tych cieniowania do implementacji efektów fali, rozmycia i rozciągania przy przewijaniu. Android 13 i nowsze wersje umożliwiają tworzenie podobnych zaawansowanych efektów w aplikacji.

Ulepszenia Choreographera

Android 13 wprowadza publiczne metody interfejsu API do Choreographer i ASurfaceControl, które dostarczają aplikacjom więcej informacji o możliwych osiach czasu klatek i dodają więcej kontekstu do SurfaceFlinger dotyczącego cyklu życia klatki. Podobnie jak wcześniej aplikacje mogą opublikować wywołanie zwrotne w Choreographer i otrzymać informacje o osi czasu klatek. W Androidzie 13 (poziom interfejsu API 33) Choreographer zwraca wiele możliwych czasów prezentacji i odpowiadające im terminy klatek. Aplikacje mogą wybrać czas prezentacji, a następnie powiadomić o tym SurfaceFlinger. SurfaceFlinger nie próbuje wtedy zastosować transakcji ani buforów zatrzaskowych przed żądanym czasem prezentacji.

Jeśli aplikacja używa nowych metod Choreographer i SurfaceControl, możesz wyświetlić cykl życia klatki aplikacji w śladzie Perfetto.

Aparat

Nagrywanie filmów HDR

Od Androida 13 interfejsy API Camera2 obsługują nagrywanie filmów w technologii High Dynamic Range (HDR), co umożliwia podgląd i nagrywanie treści wideo HDR za pomocą aparatu. W porównaniu ze standardowym zakresem dynamiki (SDR) HDR oferuje szerszy zakres kolorów i zwiększa zakres dynamiki luminancji (z obecnych 100 cd/m2 do tysięcy cd/m2). Dzięki temu jakość filmu jest bardziej zbliżona do rzeczywistości, z bogatszymi kolorami, jaśniejszymi światłami i ciemniejszymi cieniami.

Więcej informacji o nagrywaniu filmów HDR znajdziesz w dokumentacji dotyczącej nagrywania filmów HDR.

Multimedia

Dźwięk przestrzenny

Dźwięk przestrzenny to niezwykłe doznania dźwiękowe, które zapewniają użytkownikom większy realizm. Szczegółowe informacje o integracji z tą funkcją znajdziesz w naszej dokumentacji dotyczącej dźwięku przestrzennego.

Przewidujące kierowanie dźwięku

Aby ułatwić aplikacjom do multimediów określanie, jak będzie kierowany dźwięk, w Androidzie 13 wprowadziliśmy interfejsy API ścieżki audio w klasie AudioManager. Interfejs API getAudioDevicesForAttributes() umożliwia pobranie listy urządzeń, które mogą być używane do odtwarzania określonego dźwięku, a interfejs API getDirectProfilesForAttributes() pomaga sprawdzić, czy strumień audio może być odtwarzany bezpośrednio. Użyj tych interfejsów API, aby określić najlepszy AudioFormat dla ścieżki audio.

Ułatwienia dostępu

Audiodeskrypcja

W Androidzie 13 (poziom API 33) wprowadziliśmy nowe ustawienie ułatwień dostępu w całym systemie, które umożliwia użytkownikom włączenie audiodeskrypcji we wszystkich aplikacjach. Audiodeskrypcja to dodatkowa ścieżka narracji, na której lektor opisuje, co dzieje się na ekranie, podczas naturalnych przerw w dźwięku. Aplikacje mogą dostosowywać się do preferencji użytkownika dotyczących ścieżek audiodeskrypcji, wysyłając zapytanie za pomocą isAudioDescriptionRequested(), jak pokazano w tym fragmencie kodu:

Kotlin

private lateinit var accessibilityManager: AccessibilityManager

// In onCreate():
accessibilityManager = getSystemService(AccessibilityManager::class.java)

// Where your media player is initialized
if (accessibilityManager.isAudioDescriptionRequested) {
    // User has requested to enable audio descriptions
}

Java

private AccessibilityManager accessibilityManager;

// In onCreate():
accessibilityManager = getSystemService(AccessibilityManager.class);

// Where your media player is initialized
if(accessibilityManager.isAudioDescriptionRequested()) {
    // User has requested to enable audio descriptions
}

Aplikacje mogą monitorować zmiany preferencji użytkownika, dodając detektor do AccessbilityManager:

Kotlin

private val listener =
    AccessibilityManager.AudioDescriptionRequestedChangeListener { enabled ->
        // Preference changed; reflect its state in your media player
    }

override fun onStart() {
    super.onStart()

    accessibilityManager.addAudioDescriptionRequestedChangeListener(mainExecutor, listener)
}

override fun onStop() {
    super.onStop()

    accessibilityManager.removeAudioDescriptionRequestedChangeListener(listener)
}

Java

private AccessibilityManager.AudioDescriptionRequestedChangeListener listener = enabled -> {
    // Preference changed; reflect its state in your media player
};

@Override
protected void onStart() {
    super.onStart();

    accessibilityManager.addAudioDescriptionRequestedChangeListener(getMainExecutor(), listener);
}

@Override
protected void onStop() {
    super.onStop();

    accessibilityManager.removeAudioDescriptionRequestedChangeListener(listener);
}

Główna funkcja

Aktualizacje OpenJDK 11

W Androidzie 13 zaczynamy odświeżać podstawowe biblioteki Androida, aby dostosować je do wersji OpenJDK 11 LTS. Obejmuje to zarówno aktualizacje bibliotek, jak i obsługę języka Java 11 dla deweloperów aplikacji i platform. Zmiany w bibliotece podstawowej wprowadzone w Androidzie 13 będą też dostępne na urządzeniach z Androidem 12 dzięki aktualizacji systemowej Google Play modułu ART Mainline.

W Androidzie 13 wprowadzono te zmiany w bibliotekach podstawowych:

  • Obsługa słowa kluczowego var w przypadku zmiennych lokalnych i jako parametrów wyrażeń lambda.
  • Nowe metody w klasie String:

    • isBlank()
    • lines()
    • repeat()
    • strip()
    • stripLeading()
    • stripTrailing()
  • Obsługa Collection.toArray(IntFunction), aby ułatwić dostosowanie kolekcji do tablicy.

  • Obsługa ifPresentOrElse(), isEmpty(), orElseThrow() i stream() w klasach java.util Optional, OptionalDouble, OptionalInt i OptionalLong.

  • Rozszerzona obsługa SocketOptions, w tym ponowne używanie gniazd.

  • NullReader, NullWriter, InputStream, OutputStream i transferTo() Funkcja Reader, która przesyła odczytane znaki do Writer.

  • Dodano funkcję kodowania i dekodowania adresów URL za pomocą Charsets.

  • Charset dla FileReader, FileWriter, PrintStream i PrintWriter.

  • Nowe funkcje transferTo(), readNBytes(), readAllBytes() i writeBytes() dla ByteArrayInput lub OutputStream i Input lub OutputStream.

  • Obsługa środowiska wykonawczego i kompilatora dla java.lang.invoke.VarHandle.

  • Aktualizuje java.util.concurrent do interfejsu OpenJDK 11 API, używając wewnętrznie VarHandle.

Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.