Funkcje i interfejsy API – przegląd

Android 15 wprowadza świetne funkcje i interfejsy API dla deweloperów. W następnych sekcjach omówimy te funkcje, aby ułatwić Ci rozpoczęcie korzystania z powiązanych interfejsów API.

Szczegółową listę dodanych, zmodyfikowanych i usuniętych interfejsów API znajdziesz w raporcie porównawczym interfejsów API. Szczegółowe informacje o dodanych interfejsach API znajdziesz w dokumentacji interfejsów API Androida. W przypadku Androida 15 poszukaj interfejsów API dodanych na poziomie API 35. Aby dowiedzieć się, w jakich obszarach zmiany w systemie mogą mieć wpływ na Twoje aplikacje, zapoznaj się ze zmianami w zachowaniu Androida 15 w przypadku aplikacji kierowanych na Androida 15wszystkich aplikacji.

Aparat i multimedia

Android 15 zawiera wiele funkcji, które poprawiają działanie aparatu i multimediów oraz zapewniają dostęp do narzędzi i sprzętu ułatwiających twórcom realizację ich pomysłów na urządzeniach z Androidem.

Więcej informacji o najnowszych funkcjach i rozwiązaniach dla deweloperów dotyczących multimediów i aparatów w Androidzie znajdziesz w prezencie Tworzenie nowoczesnych funkcji multimediów i aparatów w Androidzie z Google I/O.

Słabe oświetlenie

W Androidzie 15 wprowadzamy Mocniejsze oświetlenie – nowy tryb automatycznej ekspozycji dostępny zarówno w Aparacie 2, jak i w rozszerzeniu do aparatu w trybie nocnym. Funkcja Wzmocnienie słabego oświetlenia reguluje ekspozycję strumienia podglądu przy słabym oświetleniu. Różni się to od sposobu, w jaki rozszerzenie do aparatu w trybie nocnym tworzy nieruchome obrazy, ponieważ tryb nocny łączy serię zdjęć, aby utworzyć pojedynczy, ulepszony obraz. Tryb nocny sprawdza się bardzo dobrze przy nagrywaniu nieruchomych obrazów, ale nie umożliwia generowania ciągłego strumienia klatek, ale funkcja słabego oświetlenia jest dostępna. Funkcja słabego oświetlenia umożliwia korzystanie z nowych możliwości kamery:

  • Dzięki ulepszonemu podglądowi obrazu użytkownicy mogą lepiej wykadrować zdjęcia w słabym oświetleniu
  • Skanowanie kodów QR przy słabym oświetleniu

Jeśli włączysz funkcję słabego oświetlenia, będzie się ona automatycznie włączać przy słabym oświetleniu i wyłączać, gdy jest więcej światła.

Aplikacje mogą nagrywać filmy w trybie „Podgląd” przy słabym oświetleniu.

Więcej informacji znajdziesz w artykule Wzmocnienie słabego oświetlenia.

Sterowanie aparatem w aplikacji

Android 15 dodaje nowe rozszerzenie, które zapewnia większą kontrolę nad sprzętem aparatu i jego algorytmami na obsługiwanych urządzeniach:

  • Zaawansowane korekty siły lampy błyskowej umożliwiające precyzyjną kontrolę intensywności lampy błyskowej w trybach SINGLE i TORCH podczas robienia zdjęć.

Kontrola headroomu HDR

Android 15 wybiera zagłówek HDR odpowiedni do możliwości danego urządzenia i głębokości bitowej panelu. W przypadku stron z dużą ilością treści SDR, np. aplikacji do obsługi wiadomości wyświetlających jedną miniaturę w formacie HDR, takie zachowanie może negatywnie wpłynąć na postrzeganą jasność treści SDR. Android 15 umożliwia sterowanie funkcjami HDR za pomocą setDesiredHdrHeadroom, aby uzyskać równowagę między treściami SDR a HDR.

Jasność elementów interfejsu SDR na ekranie po lewej stronie wydaje się bardziej jednolita niż jasność na prawym ekranie, co symuluje możliwe problemy z zapasem w momencie, gdy treści są wymieszane z HDR i SDR. Regulacja ustawienia zapasu HDR pozwala uzyskać lepszą równowagę między treściami SDR a HDR.

Regulacja głośności

Android 15 obsługuje standard głośności CTA-2075, który pomaga uniknąć niespójności głośności dźwięku i zapewnia, że użytkownicy nie muszą ciągle dostosowywać głośności podczas przełączania się między treściami. System wykorzystuje znane cechy urządzeń wyjściowych (słuchawek i głośników) oraz metadane dotyczące głośności dostępne w treściach audio AAC, aby inteligentnie dostosowywać głośność dźwięku i poziom kompresji zakresu dynamicznego.

Aby włączyć tę funkcję, musisz się upewnić, że metadane dotyczące głośności są dostępne w: swoich treści AAC i włącz tę funkcję w aplikacji. Do tego: utwórz instancję obiektu LoudnessCodecController według Wywołuje metodę fabryczną create z dźwiękiem. identyfikator sesji z powiązanego konta AudioTrack; w tym automatycznie rozpocznie stosowanie aktualizacji audio. Możesz przekazać parametr OnLoudnessCodecUpdateListener, aby zmodyfikować lub odfiltrować parametry głośności, zanim zostaną one zastosowane w MediaCodec.

// Media contains metadata of type MPEG_4 OR MPEG_D
val mediaCodec = 
val audioTrack = AudioTrack.Builder()
                                .setSessionId(sessionId)
                                .build()
...
// Create new loudness controller that applies the parameters to the MediaCodec
try {
   val lcController = LoudnessCodecController.create(mSessionId)
   // Starts applying audio updates for each added MediaCodec
}

Zostanie też zaktualizowany odtwarzacz AndroidX media3 ExoPlayer, Interfejsy API LoudnessCodecController umożliwiające płynną integrację aplikacji.

Wirtualne urządzenia MIDI 2.0

W Androidzie 13 dodano obsługę łączenia z urządzeniami MIDI 2.0 przez USB, które komunikują się za pomocą pakietu Universal MIDI Packets (UMP). Android 15 rozszerza obsługę UMP na wirtualne aplikacje MIDI, umożliwiając aplikacjom do kompozycji sterowanie aplikacjami do syntezatora jako wirtualne urządzenie MIDI 2.0 tak samo jak w przypadku urządzenia ze złączem USB MIDI 2.0.

wydajniejsze dekodowanie AV1 w oprogramowaniu;

Logo dav1d

dav1d, popularny dekoder oprogramowania AV1 firmy VideoLAN, jest teraz dostępny na urządzeniach z Androidem, które nie obsługują dekodowania AV1 w sprzęcie. dav1d jest nawet trzykrotnie bardziej wydajny niż starsza wersja dekodera AV1, dzięki czemu odtwarzanie w jakości HD AV1 jest możliwe u większej liczby użytkowników, w tym na niektórych urządzeniach niskiej i średniej klasy.

Na razie aplikacja musi wyrazić zgodę na używanie dav1d przez wywołanie jej nazwy "c2.android.av1-dav1d.decoder". W kolejnej aktualizacji program dav1d zostanie ustawiony jako domyślny dekoder oprogramowania AV1. Obsługa jest ustandaryzowana i cofnięta do urządzeń z Androidem 11, które otrzymują aktualizacje systemowe Google Play.

Narzędzia i produktywność programistów

Chociaż większość naszych działań na rzecz zwiększenia produktywności dotyczy takich narzędzi jak Android Studio, Jetpack Compose i biblioteki Jetpacka na Androida, zawsze szukamy sposobów na ułatwienie Ci realizacji Twoich pomysłów.

Aktualizacje OpenJDK 17

Android 15 kontynuuje prace nad odświeżaniem podstawowych bibliotek Androida w celu zapewnienia zgodności z funkcjami w najnowszych wersjach OpenJDK LTS.

Wprowadzono następujące funkcje i usprawnienia:

Te interfejsy API są aktualizowane na ponad miliardzie urządzeń z Androidem 12 (poziom interfejsu API 31) lub nowszym w ramach aktualizacji systemu Google Play, dzięki czemu możesz ukierunkować się na najnowsze funkcje programistyczne.

Ulepszenia plików PDF

Android 15 zawiera znaczne ulepszenia interfejsów API PdfRenderer. Aplikacje mogą zawierać zaawansowane funkcje, takie jak renderowanie plików chronionych hasłem, adnotacje, edytowanie formularzy, wyszukiwaniewybieranie z kopiowaniem. Obsługiwane są optymalizacje linearyzowanych plików PDF, które przyspieszają wyświetlanie lokalnych plików PDF i zmniejszają wykorzystanie zasobów. Biblioteka PDF Jetpacka używa tych interfejsów API, aby ułatwić dodawanie do aplikacji możliwości wyświetlania plików PDF.

Najnowsze aktualizacje renderowania PDF obejmują funkcje takie jak wyszukiwanie wbudowanego pliku PDF.

Sekcja PdfRenderer została przeniesiona do modułu, który może być aktualizowany za pomocą Google Aktualizacje systemu Google Play niezależne od wersji platformy, a my aby wrócić do Androida 11 (poziom interfejsu API 30) przez utworzenie platformy API dostępnej w wersjach starszych niż Android 15 PdfRendererPreV

Ulepszenia automatycznego przełączania języka

Android 14 ma wbudowane, wielojęzyczne rozpoznawanie treści audio z automatycznym przełączaniem języków, ale może to powodować zapominanie słów, zwłaszcza gdy między językami jest przerywana krótsza przerwa. Android 15 zawiera dodatkowe elementy sterujące, które pomagają aplikacjom dostosować ten proces do swoich potrzeb. EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS ogranicza automatyczne przełączanie się na początek sesji audio, a EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES wyłącza przełączanie języka po określonej liczbie przełączników. Te opcje są szczególnie przydatne, jeśli spodziewasz się, że podczas sesji będzie mówiony w jednym języku, który powinien być automatycznie wykrywany.

Ulepszona usługa OpenType Variable Font API

W Androidzie 15 łatwiejsza obsługa czcionki zmiennej OpenType. Teraz możesz utworzyć instancję FontFamily z czcionki zmiennej bez określania, osie wagowe za pomocą interfejsu API buildVariableFamily. Zastąpienia mechanizmu renderowania tekstu wartość osi wght, aby pasowała do wyświetlanego tekstu.

Dzięki nowemu interfejsowi API upraszcza to kod do tworzenia Typeface znacznie:

Kotlin

val newTypeface = Typeface.CustomFallbackBuilder(
            FontFamily.Builder(
                Font.Builder(assets, "RobotoFlex.ttf").build())
                    .buildVariableFamily())
    .build()

Java

Typeface newTypeface = Typeface.CustomFallbackBuilder(
            new FontFamily.Builder(
                new Font.Builder(assets, "RobotoFlex.ttf").build())
                    .buildVariableFamily())
    .build();

Wcześniej, aby utworzyć ten sam element Typeface, potrzeba dużo więcej kodu:

Kotlin

val oldTypeface = Typeface.CustomFallbackBuilder(
            FontFamily.Builder(
                Font.Builder(assets, "RobotoFlex.ttf")
                    .setFontVariationSettings("'wght' 400")
                    .setWeight(400)
                    .build())
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 100")
                        .setWeight(100)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 200")
                        .setWeight(200)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 300")
                        .setWeight(300)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 500")
                        .setWeight(500)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 600")
                        .setWeight(600)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 700")
                        .setWeight(700)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 800")
                        .setWeight(800)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 900")
                        .setWeight(900)
                        .build()
                ).build()
        ).build()

Java

Typeface oldTypeface = new Typeface.CustomFallbackBuilder(
    new FontFamily.Builder(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 400")
            .setWeight(400)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 100")
            .setWeight(100)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 200")
            .setWeight(200)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 300")
            .setWeight(300)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 500")
            .setWeight(500)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 600")
            .setWeight(600)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 700")
            .setWeight(700)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 800")
            .setWeight(800)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 900")
            .setWeight(900)
            .build()
    )
    .build()
).build();

Oto przykład tworzenia obiektu Typeface za pomocą starego i nowego interfejsu API renderuje:

Przykład różnicy w renderowaniu kroju pisma w nowym i starym stylu
Interfejsy API

W tym przykładzie obiekt Typeface utworzony za pomocą starego interfejsu API nie zawiera możliwość tworzenia dokładnych grubości czcionek dla 350, 450, 550 i 650 Font, więc mechanizm renderowania wraca do najbliższej wagi. Zatem w: w tym przypadku renderowanych jest 300 zamiast 350, 400 zamiast 450 oraz i tak dalej. Natomiast interfejs Typeface utworzony przy użyciu nowych interfejsów API dynamicznie tworzy wystąpienie Font dla danej wagi, więc dokładne wagi są renderowane dla 350, 450, 550 i 650.

Szczegółowe opcje dotyczące podziału wiersza

Starting in Android 15, a TextView and the underlying line breaker can preserve the given portion of text in the same line to improve readability. You can take advantage of this line break customization by using the <nobreak> tag in string resources or createNoBreakSpan. Similarly, you can preserve words from hyphenation by using the <nohyphen> tag or createNoHyphenationSpan.

For example, the following string resource doesn't include a line break, and renders with the text "Pixel 8 Pro." breaking in an undesirable place:

<resources>
    <string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>

In contrast, this string resource includes the <nobreak> tag, which wraps the phrase "Pixel 8 Pro." and prevents line breaks:

<resources>
    <string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>

The difference in how these strings are rendered is shown in the following images:

Layout for a line of text where the phrase "Pixel 8 Pro." isn't wrapped using a <nobreak> tag.
Layout for the same line of text where the phrase "Pixel 8 Pro." is wrapped using a <nobreak> tag.

Archiwizacja aplikacji

W zeszłym roku Android i Google Play ogłosiły obsługę archiwizacji aplikacji, aby umożliwić użytkownikom zwolnienie miejsca na urządzeniu przez częściowe usunięcie rzadko używanych aplikacji opublikowanych w Google Play za pomocą pakietu aplikacji na Androida. Android 15 obejmuje archiwizację aplikacji na poziomie systemu operacyjnego i cofania archiwizacji, co ułatwia wdrożenie tej funkcji we wszystkich sklepach z aplikacjami.

Aplikacje z uprawnieniami REQUEST_DELETE_PACKAGES mogą wywoływać Metoda PackageInstaller requestArchive prośby o zarchiwizowanie zainstalowany pakiet aplikacji, który usuwa plik APK i wszelkie pliki z pamięci podręcznej, ale pozostaje bez zmian. danych użytkownika. Zarchiwizowane aplikacje są zwracane jako aplikacje, które można wyświetlić w interfejsy API LauncherApps; użytkownicy zobaczą w interfejsie podkreślenie, aplikacje są zarchiwizowane. Jeśli użytkownik kliknie zarchiwizowaną aplikację, odpowiedzialny instalator otrzyma prośbę o przywrócenie go z archiwum. Proces przywracania jest monitorowana przez transmisję ACTION_PACKAGE_ADDED.

Włączanie trybu 16 KB na urządzeniu za pomocą opcji programisty

Przełącz opcję Uruchom z rozmiarem strony 16 KB, aby uruchomić urządzenie w trybie 16 KB.

Od Androida 15 QPR1 możesz korzystać z opcji dla deweloperów, która jest dostępna na niektórych urządzeniach, aby uruchomić urządzenie w trybie 16 KB i przeprowadzić testy na urządzeniu.

Ta opcja dla deweloperów jest dostępna na tych urządzeniach:

  • Pixel 8 i Pixel 8 Pro (z Androidem 15 QPR1 lub nowszym)
  • Pixel 8a (z Androidem 15 QPR1 lub nowszym)

Grafika

Android 15 wprowadza najnowsze ulepszenia grafiki, w tym ANGLE i dodatki do systemu graficznego Canvas.

Modernizacja dostępu do GPU w Androidzie

Logo Vulkan

Sprzęt na Androida znacznie się rozwinął od pierwszych dni, w których podstawowy system operacyjny działał na 1 procesorze, a do układów GPU można było uzyskiwać dostęp za pomocą interfejsów API opartych na potokach o stałej funkcji. Interfejs Vulkan®graphic API jest dostępny w NDK od Androida w wersji 7.0 (poziom interfejsu API 24) w ramach abstrakcji niższego poziomu, który lepiej odzwierciedla nowoczesny sprzęt GPU, skaluje się lepiej pod kątem obsługi wielu rdzeni procesora i zapewnia mniejsze nakłady pracy ze sterownikami, co prowadzi do poprawy wydajności aplikacji. Interfejs Vulkan jest obsługiwany przez wszystkie nowoczesne silniki gier.

Interfejs Vulkan jest preferowanym w Androidzie interfejsem GPU. Dlatego Android 15 zawiera ANGLE jako opcjonalną warstwę do uruchamiania trybu OpenGL® ES na interfejsie Vulkan. Przejście na ANGLE spowoduje ustandaryzację implementacji biblioteki OpenGL na Androidzie w celu zwiększenia zgodności, a w niektórych przypadkach również zwiększenia wydajności. Możesz przetestować stabilność i wydajność aplikacji OpenGL ES za pomocą ANGLE. W tym celu włącz opcję programisty w Androidzie 15 w sekcji Ustawienia -> System -> Opcje programisty -> Eksperymentalne: włącz ANGLE.

Android ANGLE na planie Vulkan

Plan nadchodzących zmian w interfejsach API Android GPU.

W ramach usprawnienia stosu GPU będziemy wysyłać ANGLE jako sterowniki systemu GL na więcej nowych urządzeń. Spodziewamy się, że w przyszłości platforma OpenGL/ES będzie dostępna tylko na platformie ANGLE. Planujemy jednak nadal obsługiwać standard OpenGL ES na wszystkich urządzeniach.

Zalecane kolejne kroki

Użyj opcji programisty, aby wybrać sterownik ANGLE dla OpenGL ES i przetestować aplikację. W nowych projektach zdecydowanie zalecamy korzystanie z Vulkan dla C/C++.

Ulepszenia Canvas

Android 15 to kontynuacja modernizacji systemu graficznego Canvas na Androidzie za pomocą nowych funkcji:

  • Matrix44 udostępnia macierz 4 x 4 do przekształcania współrzędnych, które należy stosować do manipulowania obszarem roboczym w 3D.
  • clipShader przecina bieżący klip z określonym cieniem, a clipOutShader ustawia klip na różnicę między klipem bieżącym a cieniem, co oznacza, że program do cieniowania będzie traktowany jak maska alfa. Umożliwia to wydajne rysowanie złożonych kształtów.

Wydajność i bateria

Android nadal pomaga Ci poprawiać wydajność i jakość aplikacji. Android 15 wprowadza interfejsy API, które pomagają wydajniej wykonywać zadania w aplikacji, optymalizować jej działanie i zbierać statystyki dotyczące aplikacji.

Aby dowiedzieć się więcej o sprawdzonym sposobie oszczędzania baterii, debugowaniu sieci i zużycia energii oraz o tym, jak zwiększamy wydajność baterii w procesach działających w tle w Androidzie 15 i nowszych wersjach, obejrzyj wykład Zwiększanie wydajności baterii w procesach działających w tle na Androidzie z Google I/O.

ApplicationStartInfo API

W poprzednich wersjach Androida uruchamianie aplikacji jest nieco tajemnicą. Ustalenie, czy działanie aplikacji było zimne, ciepłe czy gorące, było trudne. Trudno było też określić, ile czasu spędziła aplikacja na różnych etapach wprowadzania na rynek, takich jak rozwidlenie procesu, wywoływanie funkcji onCreate, rysowanie pierwszej klatki itd. Po utworzeniu instancji klasy Application nie można było stwierdzić, czy aplikacja została uruchomiona przez transmisję, dostawcę treści, zadanie, kopię zapasową, rozruch ukończony, alarm czy Activity.

Interfejs API ApplicationStartInfo w Androidzie 15 zapewnia wszystkie te i inne funkcje. Możesz nawet dodać do procesu własne sygnatury czasowe, aby ułatwić zbieranie danych o czasie w jednym miejscu. Oprócz zbierania danych możesz też wykorzystać właściwość ApplicationStartInfo do bezpośredniego optymalizowania uruchamiania aplikacji. Możesz na przykład wyeliminować kosztowne tworzenie w klasie Application kosztownych instancji bibliotek związanych z interfejsem podczas uruchamiania aplikacji z powodu transmisji.

Szczegółowe informacje o rozmiarze aplikacji

Od Androida w wersji 8.0 (poziom interfejsu API 26) Android obejmuje interfejs API StorageStats.getAppBytes, który podsumowuje rozmiar zainstalowanej aplikacji w pojedynczej liczbie bajtów, czyli sumy rozmiaru pliku APK, rozmiaru plików wyodrębnionych z pliku APK i plików wygenerowanych na urządzeniu, np. kodu skompilowanego z wyprzedzeniem (AOT). Ta wartość nie jest zbyt przydatna, jeśli chodzi o to, jak aplikacja wykorzystuje miejsce na dane.

W Androidzie 15 dodajemy interfejs API StorageStats.getAppBytesByDataType([type]), który pozwala sprawdzić, jak aplikacja wykorzystuje całe to miejsce, w tym podział plików APK, kod AOT i kod przyspieszający, metadane .dex, biblioteki i profile z instrukcjami.

Profilowanie zarządzane przez aplikację

Android 15 zawiera klasę ProfilingManager, która umożliwia zbieranie informacji o profilowaniu z aplikacji, takich jak zrzuty stosu, profile stosu, próbkowanie stosu itp. Wywołuje ona Twoją aplikację z dołączonym tagiem, aby zidentyfikować plik wyjściowy, który jest dostarczany do katalogu plików aplikacji. Interfejs API stosuje ograniczanie szybkości, aby zminimalizować wpływ na wydajność.

Aby uprościć tworzenie żądań profilowania w aplikacji, zalecamy użycie odpowiedniego interfejsu AndroidX API Profiling, dostępnego w wersji Core 1.15.0-rc01 lub nowszej.

Ulepszenia bazy danych SQLite

Android 15 introduces SQLite APIs that expose advanced features from the underlying SQLite engine that target specific performance issues that can manifest in apps. These APIs are included with the update of SQLite to version 3.44.3.

Developers should consult best practices for SQLite performance to get the most out of their SQLite database, especially when working with large databases or when running latency-sensitive queries.

  • Read-only deferred transactions: when issuing transactions that are read-only (don't include write statements), use beginTransactionReadOnly() and beginTransactionWithListenerReadOnly(SQLiteTransactionListener) to issue read-only DEFERRED transactions. Such transactions can run concurrently with each other, and if the database is in WAL mode, they can run concurrently with IMMEDIATE or EXCLUSIVE transactions.
  • Row counts and IDs: APIs were added to retrieve the count of changed rows or the last inserted row ID without issuing an additional query. getLastChangedRowCount() returns the number of rows that were inserted, updated, or deleted by the most recent SQL statement within the current transaction, while getTotalChangedRowCount() returns the count on the current connection. getLastInsertRowId() returns the rowid of the last row to be inserted on the current connection.
  • Raw statements: issue a raw SQlite statement, bypassing convenience wrappers and any additional processing overhead that they may incur.

Aktualizacje platformy Dynamic Performance Framework na Androida

Android 15 to kontynuacja inwestycji w Android Dynamic Performance Framework (ADPF) – zestaw interfejsów API, które umożliwiają grom i wymagającym wydajnym aplikacjom bardziej bezpośrednią interakcję z systemami zasilania i termii urządzeń z Androidem. Na obsługiwanych urządzeniach Android 15 doda nowe możliwości ADPF:

  • tryb energooszczędności używany w sesjach ze wskazówkami, który wskazuje, że powiązane z nimi wątki powinny korzystać z oszczędności energii, a nie większej wydajności. Jest to idealne rozwiązanie w przypadku długotrwałych zadań w tle.
  • Czasy pracy GPU i CPU mogą być raportowane w sesjach wskazówek, co umożliwia systemowi dostosowanie częstotliwości CPU i GPU razem, aby jak najlepiej sprostać wymaganiom zadań.
  • Progi dotyczące rezerwy cieplnej służące do interpretowania możliwego stanu ograniczania termicznego na podstawie prognozy dotyczącej pola manewru.

Więcej informacji o używaniu ADPF w aplikacjach i grach znajdziesz w dokumentacji.

Prywatność

Android 15 zawiera wiele funkcji, które pomagają deweloperom aplikacji chronić prywatność użytkowników.

Wykrywanie nagrywania ekranu

Android 15 obsługuje aplikacje, aby wykrywać w trakcie nagrywania. Funkcja wywołania zwrotnego jest wywoływana, gdy aplikacja przechodzi z widocznego stanu do niewidocznego w nagraniu ekranu. Aplikacja jest są uznawane za widoczne, jeśli działania należące do identyfikatora UID procesu rejestracji są nie są zapisywane. Dzięki temu, jeśli aplikacja wykonuje działanie związane z poufnymi danymi, możesz poinformować użytkownika, że jest nagrywany.

val mCallback = Consumer<Int> { state ->
  if (state == SCREEN_RECORDING_STATE_VISIBLE) {
    // We're being recorded
  } else {
    // We're not being recorded
  }
}

override fun onStart() {
   super.onStart()
   val initialState =
      windowManager.addScreenRecordingCallback(mainExecutor, mCallback)
   mCallback.accept(initialState)
}

override fun onStop() {
    super.onStop()
    windowManager.removeScreenRecordingCallback(mCallback)
}

Rozszerzone możliwości IntentFilter

Android 15 obsługuje dokładniejsze Intent dzięki UriRelativeFilterGroup, który zawiera zestaw obiektów UriRelativeFilter tworzących zestaw zasad dopasowania Intent, które muszą być spełnione, w tym parametry zapytania URL, fragmenty adresów URL oraz reguły blokowania lub wykluczania.

Te reguły można zdefiniować w pliku XML AndroidManifest za pomocą tagu <uri-relative-filter-group>, który może opcjonalnie zawierać tag android:allow. Mogą one zawierać tagi <data>, które używają istniejących atrybutów tagów danych, a także atrybutów android:query i android:fragment.

Oto przykład składni AndroidManifest:

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.BROWSABLE" />
  <category android:name="android.intent.category.DEFAULT" />
  <data android:scheme="http" />
  <data android:scheme="https" />
  <data android:domain="astore.com" />
  <uri-relative-filter-group>
    <data android:pathPrefix="/auth" />
    <data android:query="region=na" />
  </uri-relative-filter-group>
  <uri-relative-filter-group android:allow="false">
    <data android:pathPrefix="/auth" />
    <data android:query="mobileoptout=true" />
  </uri-relative-filter-group>
  <uri-relative-filter-group android:allow="false">
    <data android:pathPrefix="/auth" />
    <data android:fragmentPrefix="faq" />
  </uri-relative-filter-group>
</intent-filter>

Przestrzeń prywatna

Obszar prywatny można odblokować i zablokować, aby pokazać lub ukryć poufnych aplikacji na urządzeniu.

Przestrzeń prywatna umożliwia użytkownikom utworzenie na urządzeniu osobnego obszaru, w którym izolować od wrażliwych aplikacji bez wścibskich osób pod dodatkową warstwą uwierzytelnianie. Obszar prywatny korzysta z osobnego profilu użytkownika. Użytkownik może wybrać, czy w przestrzeni prywatnej chcesz używać blokady urządzenia czy osobnego ustawienia blokady.

aplikacje w przestrzeni prywatnej wyświetlają się w osobnym kontenerze w Menu z aplikacjami, nie są widoczne w widoku ostatnich osób, w powiadomieniach, ustawieniach ani w innych aplikacjach gdy przestrzeń prywatna jest zablokowana. treści użytkowników i pobrane przez nich (np. multimedia lub pliki) i konta są oddzielone między przestrzenią prywatną a zasobami głównej przestrzeni. Arkusz udostępniania oraz selektor zdjęć może służyć do przyznawania aplikacjom dostępu do treści. między pokojami, gdy przestrzeń prywatna jest odblokowana.

Użytkownicy nie będą mogli przenosić istniejących aplikacji ani ich danych do obszaru prywatnego. Zamiast tego: użytkownicy wybierają opcję instalacji w przestrzeni prywatnej, aby zainstalować aplikację za pomocą w dowolnym sklepie z aplikacjami. Aplikacje w przestrzeni prywatnej są instalowane jako oddzielać kopie od aplikacji w obszarze głównym (nowe kopie tej samej aplikacji).

Gdy użytkownik zablokuje przestrzeń prywatną, profil zostanie zatrzymany. Profil jest zatrzymana, aplikacje w przestrzeni prywatnej nie są już aktywne i nie mogą działać aktywności na pierwszym planie lub w tle, w tym wyświetlania powiadomień.

Zalecamy przetestowanie aplikacji w przestrzeni prywatnej, aby upewnić się, działa zgodnie z oczekiwaniami, zwłaszcza jeśli aplikacja należy do jednej z tych kategorii: kategorie:

Zapytanie o najnowszy wybór użytkownika dotyczący dostępu do wybranych zdjęć

Aplikacje mogą teraz wyróżniać tylko ostatnio wybrane zdjęcia i filmy, gdy użytkownik przyzna uprawnienia do multimediów w ramach dostępu częściowego. Ta funkcja może poprawić wrażenia użytkowników w przypadku aplikacji, które często proszą o dostęp do zdjęć i filmów. Aby korzystać z tej funkcji w aplikacji, włącz argument QUERY_ARG_LATEST_SELECTION_ONLY w zapytaniach MediaStore wysyłanych przez ContentResolver.

Kotlin

val externalContentUri = MediaStore.Files.getContentUri("external")

val mediaColumns = arrayOf(
   FileColumns._ID,
   FileColumns.DISPLAY_NAME,
   FileColumns.MIME_TYPE,
)

val queryArgs = bundleOf(
   // Return only items from the last selection (selected photos access)
   QUERY_ARG_LATEST_SELECTION_ONLY to true,
   // Sort returned items chronologically based on when they were added to the device's storage
   QUERY_ARG_SQL_SORT_ORDER to "${FileColumns.DATE_ADDED} DESC",
   QUERY_ARG_SQL_SELECTION to "${FileColumns.MEDIA_TYPE} = ? OR ${FileColumns.MEDIA_TYPE} = ?",
   QUERY_ARG_SQL_SELECTION_ARGS to arrayOf(
       FileColumns.MEDIA_TYPE_IMAGE.toString(),
       FileColumns.MEDIA_TYPE_VIDEO.toString()
   )
)

Java

Uri externalContentUri = MediaStore.Files.getContentUri("external");

String[] mediaColumns = {
    FileColumns._ID,
    FileColumns.DISPLAY_NAME,
    FileColumns.MIME_TYPE
};

Bundle queryArgs = new Bundle();
queryArgs.putBoolean(MediaStore.QUERY_ARG_LATEST_SELECTION_ONLY, true);
queryArgs.putString(MediaStore.QUERY_ARG_SQL_SORT_ORDER, FileColumns.DATE_ADDED + " DESC");
queryArgs.putString(MediaStore.QUERY_ARG_SQL_SELECTION, FileColumns.MEDIA_TYPE + " = ? OR " + FileColumns.MEDIA_TYPE + " = ?");
queryArgs.putStringArray(MediaStore.QUERY_ARG_SQL_SELECTION_ARGS, new String[] {
    String.valueOf(FileColumns.MEDIA_TYPE_IMAGE),
    String.valueOf(FileColumns.MEDIA_TYPE_VIDEO)
});

Piaskownica prywatności na Androida

Android 15 zawiera najnowsze rozszerzenia Usług reklamowych Androida oraz najnowszą wersję Piaskownicy prywatności na Androida. W ramach tych działań opracowujemy nowe technologie, które poprawią prywatność użytkowników i umożliwią wyświetlanie skutecznych, spersonalizowanych reklam w aplikacjach mobilnych. Na naszej stronie Piaskownicy prywatności znajdziesz więcej informacji o programach testowania i testów beta Piaskownicy prywatności na Androida, które pomogą Ci zacząć.

Health Connect

Android 15 łączy najnowsze rozszerzenia Health Connect by Android – bezpieczne i scentralizowane platforma, która pozwala zarządzać zbieranymi przez aplikacje danymi o zdrowiu i aktywności fizycznej oraz je udostępniać. Ta aktualizacja obsługa dodatkowych typów danych dotyczących fitnessu, odżywianie, temperatura skóry, plany treningów itp.

Śledzenie temperatury skóry umożliwia użytkownikom przechowywanie i udostępnianie dokładniejszych danych o temperaturze z urządzenia do noszenia lub innego urządzenia śledzącego.

Plany treningowe to usystematyzowane plany treningowe, które pomagają użytkownikom osiągnąć cele fitnessowe. Plany treningowe obejmują różne cele dotyczące ukończenia i wyników:

Więcej informacji o najnowszych aktualizacjach Health Connect na Androidzie znajdziesz w prezencie Tworzenie dostosowanych usług z Androidem Health z Google I/O.

Udostępnianie ekranu aplikacji

Android 15 obsługuje udostępnianie ekranu aplikacji, dzięki czemu użytkownicy mogą udostępniać lub nagrywać tylko okno aplikacji, a nie cały ekran urządzenia. Ta funkcja, która została po raz pierwszy włączona w Androidzie 14 QPR2, obejmuje wywołania MediaProjection, które umożliwiają aplikacji dostosowywanie udostępniania ekranu. Pamiętaj, że w przypadku aplikacji kierowanych na Androida 14 (poziom API 34) lub nowszego wymagana jest zgoda użytkownika na każdą sesję rejestrowania MediaProjection.

Wrażenia użytkownika i interfejs systemu

Android 15 daje deweloperom i użytkownikom aplikacji większą kontrolę oraz elastyczność w konfigurowaniu urządzenia zgodnie z ich potrzebami.

Aby dowiedzieć się więcej o tym, jak korzystać z najnowszych ulepszeń w Androidzie 15, aby poprawić wrażenia użytkowników aplikacji, obejrzyj prezentację Ulepszenie wrażeń użytkowników aplikacji na Androidzie z Google I/O.

Bardziej rozbudowane podglądy widżetów dzięki interfejsowi Generated Previews API

Przed Androidem 15 jedynym sposobem wyświetlania podglądów selektora widżetów było określenie statycznych zasobów obrazów lub układu. Te podglądy często znacznie różnią się od wyglądu widżetu na ekranie głównym. Ponadto za pomocą Jetpack Glance nie można tworzyć zasobów statycznych, więc deweloper Glance musiał zrobić zrzut ekranu z widżetem lub utworzyć układ XML, aby wyświetlić jego podgląd.

Android 15 obsługuje wygenerowane podglądy. Oznacza to, że dostawcy widżetów aplikacji mogą generować RemoteViews, aby używać go jako podglądu selektora zamiast zasobu statycznego.

Aplikacje mogą udostępniać widoki zdalne do selektora widżetów, co pozwala aktualizować zawartość selektora w taki sposób, aby lepiej reprezentował to, co zobaczy użytkownik.

Interfejs API usługi Push

Aplikacje mogą udostępniać wygenerowane podglądy za pomocą interfejsu API push. Aplikacje mogą udostępniać podglądy w dowolnym momencie ich cyklu życia i nie muszą otrzymać wyraźnej prośby od gospodarza. Podglądy są przechowywane w AppWidgetService, a gospodarze mogą je żądać na żądanie. W tym przykładzie wczytujemy zasób układu widżetu XML i ustawiamy go jako podgląd:

AppWidgetManager.getInstance(appContext).setWidgetPreview(
   ComponentName(
       appContext,
       SociaLiteAppWidgetReceiver::class.java
   ),
   AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
   RemoteViews("com.example", R.layout.widget_preview)
)

Oczekiwany przebieg:

  1. W dowolnym momencie dostawca widżetu może wywołać funkcję setWidgetPreview. Udostępnione podglądy są przechowywane w AppWidgetService wraz z innymi informacjami o dostawcy.
  2. setWidgetPreview informuje hostów o zaktualizowanym podglądzie za pomocą wywołania zwrotnego AppWidgetHost.onProvidersChanged. W odpowiedzi host widżetu ponownie wczytuje wszystkie informacje dostawcy.
  3. Podczas wyświetlania podglądu widżetu host sprawdza, czy AppWidgetProviderInfo.generatedPreviewCategories jest dostępna, a jeśli tak, wywołuje funkcję AppWidgetManager.getWidgetPreview, aby zwrócić zapisany podgląd dla tego dostawcy.

Kiedy zadzwonić do: setWidgetPreview

Ponieważ nie ma wywołania zwrotnego, które umożliwia wyświetlanie podglądów, aplikacje mogą wysyłać podglądy w dowolnym momencie, gdy są uruchomione. Częstotliwość aktualizacji podglądu zależy od przypadku użycia widżetu.

Na liście poniżej znajdziesz 2 główne kategorie przypadków użycia podglądu:

  • Dostawcy, którzy wyświetlają prawdziwe dane w podglądzie widżetów, np. informacje spersonalizowane lub najnowsze informacje. Ci dostawcy mogą ustawić podgląd po zalogowaniu się użytkownika lub po wykonaniu wstępnej konfiguracji w aplikacji. Następnie mogą skonfigurować zadanie okresowe, aby aktualizować podgląd w wybranym interwale. Przykładami tego typu widżetów są widżety ze zdjęciami, kalendarza, pogody lub wiadomościami.
  • Dostawcy, którzy wyświetlają w podglądach informacje statyczne lub widżety szybkich działań, które nie wyświetlają żadnych danych. Ci dostawcy mogą ustawić podgląd tylko raz przy pierwszym uruchomieniu aplikacji. Przykładami tego typu widżetów są widżet Szybkie działania na Dysku lub widżet skrótów w Chrome.

Niektórzy dostawcy mogą wyświetlać podgląd statyczny w selektorze trybu centrali, ale w selektorze na ekranie głównym mogą wyświetlać prawdziwe informacje. Podczas ustawiania podglądów dostawcy ci powinni postępować zgodnie ze wskazówkami dotyczącymi obu tych przypadków użycia.

Obraz w obrazie

Android 15 introduces changes in Picture-in-Picture (PiP) ensuring an even smoother transition when entering into PiP mode. This will be beneficial for apps having UI elements overlaid on top of their main UI, which goes into PiP.

Developers use the onPictureInPictureModeChanged callback to define logic that toggles the visibility of the overlaid UI elements. This callback is triggered when the PiP enter or exit animation is completed. Beginning in Android 15, the PictureInPictureUiState class includes another state.

With this UI state, apps targeting Android 15 (API level 35) will observe the Activity#onPictureInPictureUiStateChanged callback being invoked with isTransitioningToPip() as soon as the PiP animation starts. There are many UI elements that are not relevant for the app when it is in PiP mode, for example views or layout that include information such as suggestions, upcoming video, ratings, and titles. When the app goes to PiP mode, use the onPictureInPictureUiStateChanged callback to hide these UI elements. When the app goes to full screen mode from the PiP window, use onPictureInPictureModeChanged callback to unhide these elements, as shown in the following examples:

override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
        if (pipState.isTransitioningToPip()) {
          // Hide UI elements
        }
    }
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
        if (isInPictureInPictureMode) {
          // Unhide UI elements
        }
    }

This quick visibility toggle of irrelevant UI elements (for a PiP window) helps ensure a smoother and flicker-free PiP enter animation.

Ulepszone reguły trybu Nie przeszkadzać

AutomaticZenRule umożliwia aplikacjom dostosowywanie uwagi Reguły zarządzania (Nie przeszkadzać) i określanie, kiedy mają być aktywowane lub dezaktywowane . Android 15 znacznie ulepsza te reguły, aby poprawić komfort użytkowników. Wprowadzono te ulepszenia:

  • Dodaję typy do AutomaticZenRule, aby umożliwić systemowi zastosowanie specjalnych traktowanie pewnych zasad.
  • Dodaję ikonę do interfejsu AutomaticZenRule, aby pomóc w ulepszaniu trybów i rozpoznawalna.
  • Dodawanie do AutomaticZenRule ciągu triggerDescription, który opisuje warunki, po spełnieniu których reguła powinna zostać aktywowana dla użytkownika.
  • Dodane ZenDeviceEffects do AutomaticZenRule, co umożliwia regułom wywoływanie takich funkcji jak skali szarości wyświetlacza, tryb nocny lub przyciemnienie tapety.

Ustawianie efektu wibracji dla kanałów powiadomień

Android 15 obsługuje ustawienia silnych wibracji dla przychodzących powiadomień przez za pomocą NotificationChannel.setVibrationEffect, więc użytkownicy mogą odróżniać różne typy powiadomień bez patrząc na urządzenie.

Pasek stanu wyświetlania multimediów i automatyczne zatrzymywanie

Projekcja multimediów może ujawnić prywatne informacje o użytkowniku. Nowy, dobrze widoczny element na pasku stanu informuje użytkowników o działającej projekcji ekranu. Użytkownicy mogą kliknąć chip, aby zatrzymać udostępnianie, przesyłanie lub nagrywanie ekranu. Aby zapewnić użytkownikom bardziej intuicyjne działanie, wyświetlanie na ekranie w trakcie jest teraz automatycznie wstrzymywane, gdy ekran urządzenia jest zablokowany.

Przycisk na pasku stanu do udostępniania ekranu, przesyłania treści i nagrywania.

Duże ekrany i formaty

Android 15 zapewnia aplikacjom obsługę, która pozwala w pełni wykorzystać możliwości urządzeń z Androidem, w tym dużych ekranów, urządzeń składanych i odwracalnych.

Ulepszona wielozadaniowość na dużym ekranie

Android 15 daje użytkownikom więcej możliwości wykonywania wielu zadań jednocześnie na urządzeniach z dużym ekranem. Dla: Na przykład użytkownicy mogą zapisać ulubione kombinacje aplikacji podzielone na podzielony ekran, dostęp do paska aplikacji na ekranie i przypinanie go, aby szybko przełączać się między aplikacjami. Oznacza to, że że zapewnienie adaptacji aplikacji jest teraz ważniejsze niż kiedykolwiek.

W ramach Google I/O odbywają się sesje poświęcone tworzeniu adaptacyjnego Androida Apps i Building UI with the Material 3 biblioteka adaptacyjna może pomóc, a nasza dokumentacja jest pomocna w zaprojektowaniu .

Obsługa ekranu zakrywającego

Aplikacja może zadeklarować usługę, której używa Android 15, aby umożliwić wyświetlanie elementów Application i Activity na niewielkich ekranach okładkowych obsługiwanych urządzeń z obracanym ekranem. Te ekrany są za małe, aby można je było uznać za zgodne z aplikacjami na Androida cele. Możesz jednak włączyć ich obsługę w aplikacji, dzięki czemu będzie ona dostępna w większej liczbie miejsc.

Łączność

Android 15 aktualizuje platformę, aby zapewnić Twojej aplikacji dostęp do najnowszych osiągnięć w zakresie komunikacji i technologii bezprzewodowych.

Wsparcie dotyczące satelity

Android 15 rozszerza obsługę platformy w zakresie łączności satelitarnej, zawiera kilka elementów UI, by zapewnić spójność połączenia satelitarnego.

Aplikacje mogą używać ServiceState.isUsingNonTerrestrialNetwork() do wykrywania, kiedy urządzenie jest połączone z satelitą, dzięki czemu użytkownicy lepiej rozumieją, dlaczego pełne usługi sieciowe mogą być niedostępne. Android 15 obsługuje też aplikacje SMS i MMS oraz wstępnie zainstalowane aplikacje RCS, które umożliwiają korzystanie z łączności satelitarnej do wysyłania i odbierania wiadomości.

Powiadomienie pojawi się, gdy urządzenie połączy się z satelitą.

płynniejsze korzystanie z NFC,

Android 15 is working to make the tap to pay experience more seamless and reliable while continuing to support Android's robust NFC app ecosystem. On supported devices, apps can request the NfcAdapter to enter observe mode, where the device listens but doesn't respond to NFC readers, sending the app's NFC service PollingFrame objects to process. The PollingFrame objects can be used to auth ahead of the first communication to the NFC reader, allowing for a one tap transaction in many cases.

In addition, apps can register a filter on supported devices so they can be notified of polling loop activity, which allows for smooth operation with multiple NFC-aware applications.

Rola portfela

Android 15 wprowadza nową rolę Portfela, która umożliwia ściślejszą integrację z preferowaną przez użytkownika aplikacją portfela. Ta rola zastępuje domyślne ustawienie płatności zbliżeniowych NFC. Użytkownicy mogą zarządzać właścicielem roli Portfela, wybierając kolejno Ustawienia > Aplikacje > Aplikacje domyślne.

Rola w Portfelu jest używana do kierowania kliknięć NFC w przypadku identyfikatorów AID zarejestrowanych w kategorii płatności. Kliknięcie zawsze powoduje przejście do właściciela roli Portfela, chyba że na pierwszym planie działa inna aplikacja zarejestrowana w przypadku tego samego identyfikatora AID.

Ta rola służy też do określania, gdzie powinien znaleźć się kafelek Szybki dostęp Portfela po aktywowaniu. Gdy rola ma wartość „Brak”, kafelek Szybki dostęp jest niedostępny, a kliknięcia NFC według kategorii płatności są wyświetlane tylko w aplikacji na pierwszym planie.

Bezpieczeństwo

Android 15 pomaga zwiększyć bezpieczeństwo aplikacji i chronić jej dane. Zapewnia też użytkownikom większą przejrzystość i kontrolę nad ich danymi. Więcej informacji o tym, co robimy, aby zwiększać bezpieczeństwo użytkowników i chronić ich aplikacje przed nowymi zagrożeniami, znajdziesz w prezentacji Ochrona bezpieczeństwa użytkowników Androida z Google I/O.

Integracja Menedżera danych logowania z autouzupełnianiem

Starting with Android 15, developers can link specific views like username or password fields with Credential Manager requests, making it easier to provide a tailored user experience during the sign-in process. When the user focuses on one of these views, a corresponding request is sent to Credential Manager. The resulting credentials are aggregated across providers and displayed in autofill fallback UIs, such as inline suggestions or drop-down suggestions. The Jetpack androidx.credentials library is the preferred endpoint for developers to use and will soon be available to further enhance this feature in Android 15 and higher.

Integracja rejestracji i logowania jednym kliknięciem z prośbami biometrycznymi

Menedżer danych uwierzytelniających integruje prompty biometryczne z procesami tworzenia danych uwierzytelniających i logowania, dzięki czemu dostawcy nie muszą zarządzać promptami biometrycznymi. Dlatego dostawcy danych uwierzytelniających mogą się skupić jedynie na wyników tworzenia i odbierania przepływów, wzbogaconych o wynik przepływu biometrycznego. Ten uproszczony proces umożliwia bardziej wydajne i prostsze tworzenie oraz pobieranie danych logowania.

Zarządzanie kluczami w przypadku pełnego szyfrowania

Wprowadzamy na Androidzie 15 funkcję E2eeContactKeysManager, która ułatwia pełne szyfrowanie (E2EE) w aplikacjach na Androida dzięki interfejsowi API na poziomie systemu operacyjnego do przechowywania kryptograficznych kluczy publicznych.

E2eeContactKeysManager został opracowany z myślą o integracji z aplikacją do obsługi kontaktów na platformie. Dzięki temu użytkownicy mogą w scentralizowany sposób zarządzać kluczami publicznymi kontaktów i je weryfikować.

Sprawdzanie uprawnień w przypadku identyfikatorów URI treści

Android 15 wprowadza nowy zestaw interfejsów API, które sprawdzają uprawnienia dotyczące identyfikatorów URI treści:

Ułatwienia dostępu

Android 15 zawiera funkcje, które poprawiają dostępność dla użytkowników.

Lepszy brajl

W Androidzie 15 umożliwiliśmy TalkBack obsługę monitorów brajlowskich korzystających ze standardu HID zarówno przez USB, jak i bezpiecznego Bluetootha.

Ten standard, podobnie jak używany przez myszy i klawiatury, ułatwi Androidowi obsługę szerszej gamy monitorów brajlowskich.

Internacjonalizacja

Android 15 zawiera funkcje i możliwości, które uzupełniają obsługę urządzenia w różnych językach.

CJK czcionka zmienna

Począwszy od Androida 15 plik czcionki NotoSansCJK dla języka chińskiego, japońskiego i koreańskiego (CJK) jest teraz czcionką zmienną. Zmienne czcionki otwierają nowe możliwości dla typografii kreacji w językach CJK. Projektanci mogą odkrywać szerszą gamę stylów i tworzyć efektowne układy, które wcześniej były trudne lub niewykonalne.

Sposób wyświetlania czcionki zmiennej w językach chińskim, japońskim i koreańskim (CJK) w przypadku różnych szerokości czcionki.

Uzasadnienie dotyczące znaków pośrednich

Starting with Android 15, text can be justified utilizing letter spacing by using JUSTIFICATION_MODE_INTER_CHARACTER. Inter-word justification was first introduced in Android 8.0 (API level 26), and inter-character justification provides similar capabilities for languages that use the whitespace character for segmentation, such as Chinese, Japanese, and others.

Layout for Japanese text using JUSTIFICATION_MODE_NONE.
Layout for English text using JUSTIFICATION_MODE_NONE.


Layout for Japanese text using JUSTIFICATION_MODE_INTER_WORD.
Layout for English text using JUSTIFICATION_MODE_INTER_WORD.


Layout for Japanese text using the JUSTIFICATION_MODE_INTER_CHARACTER.
Layout for English text using the JUSTIFICATION_MODE_INTER_CHARACTER.

Konfiguracja automatycznego podziału wiersza

Android started supporting phrase-based line breaks for Japanese and Korean in Android 13 (API level 33). However, while phrase-based line breaks improve the readability of short lines of text, they don't work well for long lines of text. In Android 15, apps can apply phrase-based line breaks only for short lines of text, using the LINE_BREAK_WORD_STYLE_AUTO option. This option selects the best word style option for the text.

For short lines of text, phrase-based line breaks are used, functioning the same as LINE_BREAK_WORD_STYLE_PHRASE, as shown in the following image:

For short lines of text, LINE_BREAK_WORD_STYLE_AUTO applies phrase-based line breaks to improve the readability of the text. This is the same as applying LINE_BREAK_WORD_STYLE_PHRASE.

For longer lines of text, LINE_BREAK_WORD_STYLE_AUTO uses a no line-break word style, functioning the same as LINE_BREAK_WORD_STYLE_NONE, as shown in the following image:

For long lines of text, LINE_BREAK_WORD_STYLE_AUTO applies no line-break word style to improve the readability of the text. This is the same as applying LINE_BREAK_WORD_STYLE_NONE.

Dodatkowa czcionka japońska Hentaigana

W Androidzie 15 domyślnie jest dołączony plik czcionki starej japońskiej Hiragana (zwanej Hentaigana). Dzięki wyjątkowym kształtom postaci hentaigana charakterystyczne dla dzieła sztuki lub wzornictwa, a także pomagają zachować wierność przekazywanie i rozumienie starożytnych japońskich dokumentów.

Styl znaków i tekstu dla japońskiego hentaigany czcionki.

Krzyżówka VideoLAN Copyright (c) 1996–2010 VideoLAN. To logo oraz jego zmodyfikowana wersja mogą być używane lub modyfikowane przez dowolną osobę w celu odwoływania się do projektu VideoLAN lub dowolnego produktu opracowanego przez zespół VideoLAN, ale nie wskazuje, że projekt pochodzi z rekomendacji.

Vulkan i logo Vulkan są zastrzeżonymi znakami towarowymi firmy Khronos Group Inc.

OpenGL jest zastrzeżonym znakiem towarowym, a logo OpenGL ES jest znakiem towarowym firmy Hewlett Packard Enterprise i używa go za zgodą Khronos.