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 15 i wszystkich 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
iTORCH
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.
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;
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:
- Ulepszenia jakości życia dotyczące buforów NIO
- Strumienie
- Dodatkowe metody
math
istrictmath
- Aktualizacje pakietów
util
, w tym sekwencjecollection
,map
iset
- Poziom pomocy
ByteBuffer
wDeflater
- Aktualizacje zabezpieczeń, np.
X500PrivateCredential
, i aktualizacje kluczy bezpieczeństwa
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, wyszukiwanie i wybieranie 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.
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:
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:
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
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
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
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, aclipOutShader
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()
andbeginTransactionWithListenerReadOnly(SQLiteTransactionListener)
to issue read-onlyDEFERRED
transactions. Such transactions can run concurrently with each other, and if the database is in WAL mode, they can run concurrently withIMMEDIATE
orEXCLUSIVE
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, whilegetTotalChangedRowCount()
returns the count on the current connection.getLastInsertRowId()
returns therowid
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
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:
- Aplikacje z logiką profili służbowych, która zakłada, że zainstalowane kopie aplikacji spoza profilu głównego, profil służbowy.
- Aplikacje medyczne
- Aplikacje uruchamiające
- Aplikacje ze sklepu z aplikacjami
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:
- Cele dotyczące ukończenia treningu związane z spalaniem kalorii, dystansem, czasem trwania, powtórzeniem i liczbą kroków.
- Docelowa skuteczność w okolicach jak najwięcej powtórzeń (AMRAP), kadencja, tętno, moc, ostrzegalne tempo wysiłku oraz prędkości.
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.
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:
- W dowolnym momencie dostawca widżetu może wywołać funkcję
setWidgetPreview
. Udostępnione podglądy są przechowywane wAppWidgetService
wraz z innymi informacjami o dostawcy. setWidgetPreview
informuje hostów o zaktualizowanym podglądzie za pomocą wywołania zwrotnegoAppWidgetHost.onProvidersChanged
. W odpowiedzi host widżetu ponownie wczytuje wszystkie informacje dostawcy.- 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ągutriggerDescription
, który opisuje warunki, po spełnieniu których reguła powinna zostać aktywowana dla użytkownika. - Dodane
ZenDeviceEffects
doAutomaticZenRule
, 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.
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.
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:
Context.checkContentUriPermissionFull
: wykonuje pełne sprawdzenie uprawnień w identyfikatorach URI treści.- Atrybut w pliku manifestu
Activity
requireContentUriPermissionFromCaller
: wymusza określone uprawnienia do podanych identyfikatorów URI treści podczas uruchamiania aktywności. - Klasa
ComponentCaller
dla rozmówców (Activity
): reprezentuje aplikację, która uruchomiła aktywność.
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.
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.
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 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:
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.
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.