Android 15 wprowadza programistów – świetne nowe funkcje i interfejsy API. W sekcjach poniżej znajdziesz podsumowanie tych funkcji, aby ułatwić Ci rozpoczęcie korzystania z powiązanych interfejsów API.
Szczegółową listę nowych, zmodyfikowanych i usuniętych interfejsów API znajdziesz w raporcie różnic między interfejsami API. Szczegółowe informacje o nowych interfejsach API znajdziesz w dokumentacji interfejsu Android API. Nowe interfejsy API są wyróżnione w celu zapewnienia widoczności. Aby dowiedzieć się więcej o obszarach, w których zmiany na platformie mogą wpłynąć na Twoje aplikacje, zapoznaj się ze zmianami w zachowaniu użytkowników Androida 15, które wpływają na aplikacje, gdy są kierowane na Androida 15, oraz zmianami w działaniu, które wpływają na wszystkie aplikacje, niezależnie od wersjitargetSdkVersion
.
Aparat i multimedia
Android 15 zawiera wiele funkcji, które usprawniają działanie aparatu i multimediów oraz zapewniają dostęp do narzędzi i sprzętu, które pomagają twórcom realizować swoją wizję na Androidzie.
Więcej informacji o najnowszych funkcjach i rozwiązaniach dla programistów dotyczących multimediów i aparatu na Androida znajdziesz w prezentacji Google I/O na temat tworzenia nowoczesnych multimediów i aparatów w Androidzie.
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 pola manewru w trybie 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.
![](https://developer.android.google.cn/static/about/versions/15/images/hdr-headroom.png?authuser=9&hl=pl)
Regulacja głośności
W Androidzie 15 wprowadzamy obsługę Standard głośności CTA-2075 dla Ciebie uniknąć niespójności w dźwięku i zapewnić, że użytkownicy nie muszą dostosować głośność podczas przełączania się między treściami. System wykorzystuje znane charakterystyki urządzeń wyjściowych (słuchawki i głośniki) oraz metadanych dotyczących głośności dostępnych w treściach audio AAC, aby głośność dźwięku i poziomy 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 przesłać
OnLoudnessCodecUpdateListener
do modyfikowania lub filtrowania
parametrów głośności przed ich zastosowaniem.
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.
Urządzenia Virtual 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.
Bardziej wydajne dekodowanie programowe AV1
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.
Produktywność i narzędzia programistów
Choć większość naszych działań ukierunkowanych na usprawnienie centrów biurowych Twojej firmy dotyczy narzędzi takich jak Android Studio, Jetpack Compose czy biblioteki Android Jetpack, cały czas szukamy nowych rozwiązań na naszej platformie, aby ułatwić Ci zrealizowanie Twojej wizji.
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 istotne ulepszenia interfejsów API PdfRenderer
. Aplikacje mogą zawierać zaawansowane funkcje, takie jak renderowanie plików chronionych hasłem, adnotacje, edytowanie formularzy, wyszukiwanie i wybieranie plików razem z kopią. Optymalizacje linearnych plików PDF są obsługiwane w celu przyspieszenia wyświetlania lokalnych plików PDF i ograniczenia zużycia zasobów.
![](https://developer.android.google.cn/static/about/versions/15/images/pdf-rendering.png?authuser=9&hl=pl)
Moduł PdfRenderer
został przeniesiony do modułu, który można aktualizować przy użyciu aktualizacji systemu Google Play niezależnie od wersji platformy. Aby wspieramy te zmiany z powrotem na Androida 11 (poziom interfejsu API 30), tworzymy zgodną wersję platformy API o nazwie PdfRendererPreV
zgodną z wersją API sprzed Androida 15.
Twoja opinia na temat ulepszeń interfejsu PdfRenderer
API jest dla nas bardzo ważna. Planujemy jeszcze bardziej ułatwić wdrażanie tych interfejsów API w ramach nadchodzącej biblioteki Android Jetpack.
Zawężenie 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.
Ulepszony interfejs API czcionek zmiennej OpenType
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 podziału wiersza
Począwszy od Androida 15, TextView
i podstawowych wersji
znak podziału wiersza może zachować daną część tekstu w tym samym wierszu,
i czytelność. Aby skorzystać z tego dostosowania podziału wiersza, możesz użyć parametru
tagu <nobreak>
w zasobach ciągu tekstowego lub
createNoBreakSpan
W podobny sposób można zachowywać słowa z
łącznik za pomocą tagu <nohyphen>
lub
createNoHyphenationSpan
Na przykład następujący zasób ciągu znaków nie zawiera podziału wiersza, renderuje się z tekstem „Pixel 8 Pro”. awansowanie w niepożądanym miejscu:
<resources>
<string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>
Ten zasób tekstowy zawiera natomiast tag <nobreak>
, który opakowuje
zwrot „Pixel 8 Pro”. i zapobiega podziałowi wiersza:
<resources>
<string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>
Różnica w sposobie renderowania tych ciągów widać poniżej. obrazy:
![](https://developer.android.google.cn/static/about/versions/15/images/line-breaks-none.png?authuser=9&hl=pl)
<nobreak>
.![](https://developer.android.google.cn/static/about/versions/15/images/line-breaks-included.png?authuser=9&hl=pl)
<nobreak>
.Archiwizowanie aplikacji
W zeszłym roku na Androidzie i w Google Play ogłoszono wprowadzenie obsługi archiwizowania aplikacji, która umożliwia użytkownikom zwolnienie miejsca przez częściowe usunięcie z urządzenia rzadko używanych aplikacji, które zostały opublikowane przy użyciu pakietu Android App Bundle w Google Play. Android 15 obejmuje teraz obsługę archiwizowania i przywracania z archiwum na poziomie systemu operacyjnego, co ułatwia wdrożenie tej funkcji we wszystkich sklepach z aplikacjami.
Aplikacje z uprawnieniami REQUEST_DELETE_PACKAGES
mogą wywołać metodę PackageInstaller
requestArchive
, aby poprosić o archiwizację zainstalowanego pakietu aplikacji. Spowoduje to usunięcie pliku APK i plików zapisanych w pamięci podręcznej, ale dane użytkownika pozostaną niezmienione. Zarchiwizowane aplikacje są zwracane przez interfejsy API LauncherApps
jako aplikacje możliwe do wyświetlenia. Użytkownicy będą widzieli, że zostały zarchiwizowane. Jeśli użytkownik kliknie zarchiwizowaną aplikację, odpowiedzialny instalator otrzyma prośbę o przywrócenie jej z archiwum, a proces przywracania można monitorować dzięki transmisji ACTION_PACKAGE_ADDED
.
Grafika
Android 15 zawiera najnowsze ulepszenia grafiki, w tym ANGLE i uzupełnienia do systemu graficznego Canvas.
Modernizacja dostępu do GPU na 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
![Plan nadchodzących zmian w interfejsach API Android GPU.](https://developer.android.google.cn/static/about/versions/15/images/angle-vulkan-roadmap.png?authuser=9&hl=pl)
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
Nadal koncentrujemy się na tym, aby pomagać Ci w zwiększaniu wydajności i jakości aplikacji. Android 15 wprowadza nowe interfejsy API, które pomagają zwiększyć efektywność wykonywania zadań w aplikacji, optymalizować wydajność aplikacji i zbierać statystyki dotyczące aplikacji.
Sprawdzone metody oszczędzania baterii, debugowanie wykorzystania sieci i energii oraz szczegółowe informacje o tym, jak poprawiamy efektywność pracy w tle na Androidzie 15 i w najnowszych wersjach Androida, znajdziesz w prezentacji z Google I/O na temat poprawy wydajności baterii podczas pracy w tle na Androidzie.
Interfejs API ApplicationStartInfo
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 zupełnie nową klasę ProfilingManager
, która umożliwia zbieranie danych dotyczących profilowania z poziomu aplikacji. Planujemy dodać do niej interfejs Android Jetpack API, który uprości tworzenie żądań profilowania. Podstawowy interfejs API umożliwi jednak gromadzenie danych stosu, profili sterty, próbkowanie stosu i nie tylko. Zapewnia wywołanie zwrotne do aplikacji z dostarczonym tagiem identyfikującym plik wyjściowy, który jest dostarczany do katalogu plików aplikacji. Interfejs API ogranicza liczbę żądań, aby zminimalizować wpływ na wydajność.
Ulepszenia bazy danych SQLite
Android 15 wprowadza nowe interfejsy API SQLite, które udostępniają zaawansowane funkcje bazowego mechanizmu SQLite i są kierowane na konkretne problemy z wydajnością, które mogą występować w aplikacjach.
Deweloperzy powinni zapoznać się ze sprawdzonymi metodami dotyczącymi wydajności SQLite, aby jak najlepiej wykorzystać możliwości bazy danych SQLite, zwłaszcza w przypadku pracy z dużymi bazami danych lub wykonywania zapytań wrażliwych na opóźnienia.
- Odroczone transakcje tylko do odczytu: jeśli wystawiasz transakcje, które są tylko do odczytu (bez instrukcji zapisu), użyj
beginTransactionReadOnly()
ibeginTransactionWithListenerReadOnly(SQLiteTransactionListener)
, aby wysłać transakcjeDEFERRED
tylko do odczytu. Takie transakcje mogą być prowadzone równolegle, a jeśli baza danych działa w trybie WAL, mogą być uruchamiane jednocześnie z transakcjamiIMMEDIATE
lubEXCLUSIVE
. - Liczba i identyfikatory wierszy: dodano nowe interfejsy API, które pozwalają pobierać liczbę zmienionych wierszy lub ostatni wstawiony identyfikator wiersza bez wysyłania dodatkowego zapytania.
getLastChangedRowCount()
zwraca liczbę wierszy wstawionych, zaktualizowanych lub usuniętych przez najnowszą instrukcję SQL w bieżącej transakcji, agetTotalChangedRowCount()
– liczbę w bieżącym połączeniu.getLastInsertRowId()
zwracarowid
z ostatniego wiersza do wstawienia w bieżącym połączeniu. - Nieprzetworzone instrukcje: uruchamia nieprzetworzoną instrukcję SQlite, pomijając opcjonalne opakowania i wszelkie dodatkowe koszty przetwarzania, które mogą się wiązać.
Aktualizacje Android Dynamic Performance Framework
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 ma wiele funkcji, które pomagają deweloperom aplikacji chronić prywatność użytkownika.
Wykrywanie nagrania zawartości ekranu
Android 15 obsługuje aplikacje, aby wykrywać w trakcie nagrywania. Wywołanie zwrotne jest wywoływane przy każdym przejściu w aplikacji między widocznością lub niewidocznością na 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 operację związaną z poufnymi danymi, może poinformować użytkownika, że są one rejestrowane.
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 zapewnia dokładniejszą rozdzielczość w Intent
dzięki
UriRelativeFilterGroup
, który zawiera zbiór
UriRelativeFilter
obiekty, które tworzą zbiór Intent
reguł, które muszą zostać spełnione, w tym parametrów zapytania URL,
według fragmentów i reguł blokowania lub wykluczania.
Reguły te można zdefiniować w pliku XML AndroidManifest
za pomocą nowego atrybutu
<uri-relative-filter-group>
, który może opcjonalnie zawierać tag
Tag android:allow
. Te tagi mogą zawierać <data>
tagów, które korzystają z istniejących danych
tagów oraz nowych 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" />
<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 dostęp do wybranych zdjęć dotyczące ostatniego użytkownika
Teraz aplikacje mogą wyróżniać tylko ostatnio wybrane zdjęcia
i filmów po przyznaniu częściowego dostępu do multimediów. Ten
może poprawić wygodę użytkowników w przypadku aplikacji, które często proszą o dostęp
dostęp do zdjęć i filmów. Aby korzystać z tej funkcji w aplikacji, włącz
Argument QUERY_ARG_LATEST_SELECTION_ONLY
podczas wykonywania zapytania MediaStore
do 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 integruje najnowsze rozszerzenia związane z Health Connect na Androida – bezpiecznej i scentralizowanej platformy do zarządzania zbieranymi przez aplikacje danymi o zdrowiu i aktywności fizycznej oraz ich udostępniania. Ta aktualizacja dodaje obsługę nowych typów danych dotyczących fitnessu, odżywiania, temperatury skóry, planów treningowych i nie tylko.
Ś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 ustrukturyzowane plany treningowe, które pomagają użytkownikom osiągnąć cele treningowe. Wsparcie w zakresie planów treningowych obejmuje różne cele:
- Cele realizacji dotyczące spalonych kalorii, odległości, czasu trwania, powtarzania i kroków.
- Docelowe wyniki w zakresie jak największej liczby powtórzeń (AMRAP), częstotliwości, tętna, siły, postrzeganego tempa wysiłku i prędkości.
Więcej o najnowszych aktualizacjach Health Connect na Androida dowiesz się z omówienia Google I/O zatytułowanej Tworzenie elastycznych treści przy użyciu Android Health.
Częściowe udostępnianie ekranu
Android 15 obsługuje udostępnianie części ekranu, dzięki czemu użytkownicy mogą udostępnić lub nagrać tylko okno aplikacji, a nie cały ekran urządzenia. Ta funkcja, po raz pierwszy włączona w Androidzie 14 QPR2, obejmuje wywołania zwrotne (MediaProjection
), które umożliwiają aplikacji dostosowanie sposobu udostępniania części ekranu. Pamiętaj, że w przypadku aplikacji kierowanych na Androida 14 (poziom interfejsu API 34) lub nowszego wymagana jest teraz zgoda użytkownika na każdą sesję przechwytywania MediaProjection
.
Wygoda użytkowania i interfejs systemu
Android 15 daje deweloperom aplikacji i użytkownikom większą kontrolę oraz elastyczność w konfigurowaniu urządzeń do własnych potrzeb.
Aby dowiedzieć się więcej o tym, jak za pomocą najnowszych ulepszeń Androida 15 poprawić wrażenia użytkowników aplikacji, przeczytaj prezentację Google I/O na temat poprawiania wrażeń użytkowników aplikacji na Androida.
Więcej możliwości podglądu widżetów w interfejsie Generated Previews API
Przed Androidem 15 jedynym sposobem udostępniania podglądu selektora widżetów było określenie statyczny zasób obrazu lub układu. Te podglądy często się różnią znacznie różnią się od wyglądu widżetu po umieszczeniu na ekranu. Ponadto za pomocą Jetpack Glance nie można tworzyć zasobów statycznych, musiał zrobić zrzut ekranu swojego widżetu lub utworzyć układ XML, podglądu widżetu.
W Androidzie 15 dodano obsługę wygenerowanych podglądów. Oznacza to, że widżet aplikacji
dostawcy mogą wygenerować element RemoteViews
, który będzie używany jako podgląd selektora,
zasobu statycznego.
![](https://developer.android.google.cn/static/about/versions/15/images/generated-previews.png?authuser=9&hl=pl)
Interfejs API usługi Push
Aplikacje mogą udostępniać wygenerowane podglądy za pomocą interfejsu API push. Aplikacje mogą zapewnić
wyświetla podgląd w dowolnym momencie cyklu życia i nie otrzymuje wyraźnego żądania.
od gospodarza, aby wyświetlić podgląd. Podglądy są zachowywane w usłudze AppWidgetService
,
a gospodarzy mogą o to poprosić na żądanie. Poniższy przykład wczytuje widżet XML.
zasobu szablonu i ustawia 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 przepływ:
- W dowolnym momencie dostawca widżetu wywołuje metodę
setWidgetPreview
. Podana wartość podglądy są zachowywane wAppWidgetService
wraz z informacjami o innych dostawcach. setWidgetPreview
powiadamia hosty o zaktualizowanym podglądzie za pomocąAppWidgetHost.onProvidersChanged
oddzwanianie. W odpowiedzi widżet ponownie wczytuje wszystkie informacje o swoim dostawcy.- Podczas wyświetlania podglądu widżetu host sprawdza,
AppWidgetProviderInfo.generatedPreviewCategories
, a jeśli wybrano kategoria jest dostępna, połączeniaAppWidgetManager.getWidgetPreview
z zwróci zapisany podgląd dla tego dostawcy.
Kiedy zadzwonić do: setWidgetPreview
Nie ma wywołania zwrotnego, które umożliwiałoby wyświetlenie podglądu, dlatego aplikacje mogą wysłać w dowolnym momencie ich uruchomienia. Częstotliwość aktualizowania 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ą w podglądach widżetów prawdziwe dane, takie jak spersonalizowane lub najnowszych informacji. Ci dostawcy mogą ustawić podgląd, gdy użytkownik jest zalogowany lub przeprowadził w swojej aplikacji początkową konfigurację. Następnie mogą skonfigurować zadanie okresowe, aby aktualizować podglądy w wybranym cyklu. Przykładem tego rodzaju widżetu może być zdjęcie, kalendarz, pogoda lub wiadomości. widżet.
- Dostawcy, którzy wyświetlają informacje statyczne w podglądzie lub w widżetach z szybkim działaniem które nie zawierają żadnych danych. Ci dostawcy mogą ustawić podgląd raz, gdy uruchomienia aplikacji. Przykładem tego rodzaju widżetu jest Szybki przejazd w widżecie działań ani w widżecie skrótów do Chrome.
Niektórzy dostawcy mogą wyświetlać w selektorze trybu centrali podgląd statyczny, ale są prawdziwe w selektorze ekranu głównego. Tacy dostawcy powinni postępować zgodnie ze wskazówkami dla obu tych zastosowań.
Obraz w obrazie
W Androidzie 15 wprowadzono nowe zmiany w funkcji obraz w obrazie, dzięki czemu płynniejsze przejście po przejściu w tryb PIP. Przyniesie to korzyści aplikacji z elementami interfejsu nałożonymi na główny interfejs, które są przekazywane do obrazu w obrazie.
Deweloperzy używają wywołania zwrotnego onPictureInPictureModeChanged
do definiowania logiki
który przełącza widoczność nakładanych elementów interfejsu. To wywołanie zwrotne
wywoływane po zakończeniu rozpoczęcia lub zakończenia animacji obrazu w obrazie. Początek za
Android 15 klasa PictureInPictureUiState
otrzymała nowy stan.
Dzięki temu interfejsowi aplikacje kierowane na Androida 15 będą odnotowywać
Wywołanie zwrotne Activity#onPictureInPictureUiStateChanged
z
isTransitioningToPip()
od razu po rozpoczęciu animacji funkcji obraz w obrazie. Istnieją
wiele elementów interfejsu, które nie są istotne dla aplikacji w trybie Obraz w obrazie,
przykładowe widoki lub układ strony z informacjami, takimi jak sugestie,
filmów, ocen i tytułów. Gdy aplikacja przejdzie w tryb obrazu w obrazie, użyj
onPictureInPictureUiStateChanged
wywołanie zwrotne do ukrycia tych elementów interfejsu. Gdy
przejdzie do trybu pełnoekranowego z okna funkcji obraz w obrazie, użyj
Wywołanie zwrotne onPictureInPictureModeChanged
do odkrycia tych elementów, jak w tym przykładzie
w tych przykładach:
override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
if (pipState.isTransitioningToPip()) {
// Hide UI elements
}
}
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
if (isInPictureInPictureMode) {
// Unhide UI elements
}
}
Ten szybki przełącznik widoczności nieistotnych elementów interfejsu (dla okna PIP) pomaga aby uzyskać płynniejszą i wolną od migotania animacja PIP.
Ulepszone reguły Nie przeszkadzać
AutomaticZenRule
pozwala aplikacjom dostosowywać reguły Zarządzania aktywnością (Nie przeszkadzać) i decydować, kiedy je aktywować, a kiedy dezaktywować. Android 15 znacznie ulepsza te reguły, aby zwiększyć wygodę użytkowników. Obejmuje te ulepszenia:
- Dodanie typów do funkcji
AutomaticZenRule
, co umożliwia systemowi zastosowanie specjalnego traktowania niektórych reguł. - Dodano ikonę do interfejsu
AutomaticZenRule
, aby ułatwić rozpoznawanie trybów. - Dodaj do elementu
AutomaticZenRule
ciąg znakówtriggerDescription
opisujący warunki, po spełnieniu których reguła powinna zostać aktywowana dla użytkownika. - Do
AutomaticZenRule
dodano parametrZenDeviceEffects
, który umożliwia regułom uruchamianie takich funkcji jak wyświetlacz w skali szarości, tryb nocny czy przyciemnianie tapety.
Ustaw efekt wibracji dla kanałów powiadomień
Android 15 obsługuje ustawienia silnych wibracji dla powiadomień przychodzących według kanału za pomocą NotificationChannel.setVibrationEffect
. Dzięki temu użytkownicy mogą rozróżniać różne typy powiadomień bez konieczności patrzenia na urządzenie.
Duże ekrany i formaty
Android 15 obsługuje aplikacje, które pozwalają w pełni wykorzystać możliwości różnych formatów Androida, w tym dużych ekranów, urządzeń odwracanych i składanych.
Ulepszona wielozadaniowość na dużym ekranie
Android 15 zapewnia użytkownikom lepsze możliwości wykonywania wielu zadań jednocześnie na urządzeniach z dużymi ekranami. Na przykład użytkownicy mogą zapisać ulubione kombinacje aplikacji podzielonej ekranu, aby mieć do nich szybki dostęp, oraz przypiąć pasek zadań na ekranie, aby szybko przełączać się między nimi. Oznacza to, że dbanie o możliwość dostosowania aplikacji jest obecnie ważniejsze niż kiedykolwiek wcześniej.
Google I/O prowadzi sesje na temat tworzenia adaptacyjnych aplikacji na Androida i tworzenia interfejsu budynku za pomocą biblioteki adaptacyjnej Material 3. Więcej informacji na ten temat znajdziesz w dokumentacji dotyczącej projektowania na duże ekrany.
Obsługa ekranu zasłaniają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.
Połączenia
Android 15 aktualizuje platformę, aby zapewnić aplikacji dostęp do najnowszych osiągnięć w dziedzinie technologii komunikacji i technologii bezprzewodowej.
Obsługa satelitów
Android 15 stale rozszerza obsługę połączeń satelitarnych przez platformę i zawiera pewne elementy interfejsu, aby zapewnić spójne wrażenia użytkownika w przypadku połączeń satelitarnych.
Aplikacje mogą używać ServiceState.isUsingNonTerrestrialNetwork()
do wykrywania, czy urządzenie jest połączone z satelitą, co pomaga im zorientować się, dlaczego pełne usługi sieciowe mogą być niedostępne. Dodatkowo Android 15 zapewnia obsługę aplikacji do obsługi SMS-ów i MMS-ów oraz wstępnie zainstalowanych aplikacji RCS do wysyłania i odbierania wiadomości przez satelitę.
![](https://developer.android.google.cn/static/about/versions/15/images/satellite-notification.png?authuser=9&hl=pl)
Płynniejsze korzystanie z NFC
Pracujemy nad tym, aby płatności zbliżeniowe były wygodniejsze i bardziej niezawodne, jednocześnie obsługując rozbudowany ekosystem aplikacji NFC na Androida. Na obsługiwanych urządzeniach aplikacje mogą poprosić NfcAdapter
o przejście w tryb obserwacji, w którym urządzenie nasłuchuje, ale nie odpowiada na czytniki NFC, wysyła do przetworzenia PollingFrame
obiekty aplikacji NFC. Obiektów PollingFrame
można używać do uwierzytelniania przed rozpoczęciem pierwszej komunikacji z czytnikiem NFC, co w wielu przypadkach umożliwia przeprowadzenie transakcji jednym dotknięciem.
Dodatkowo aplikacje mogą teraz rejestrować filtr na obsługiwanych urządzeniach, co pozwala otrzymywać powiadomienia o aktywności w pętli odpytywania, co umożliwia płynną obsługę wielu aplikacji obsługujących komunikację NFC.
Rola w Portfelu
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.
Zabezpieczenia
Android 15 pomaga zwiększyć bezpieczeństwo aplikacji, chronić jej dane oraz zapewniać użytkownikom większą przejrzystość i kontrolę nad ich danymi. W rozmowie z Google I/O poświęconej bezpieczeństwie użytkowników na urządzeniach z Androidem znajdziesz więcej informacji o tym, co robimy, aby zwiększyć ochronę użytkowników i ochronę aplikacji przed nowymi zagrożeniami.
Zintegruj 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.
Zintegruj rejestrację i logowanie jednym dotknięciem z potwierdzeniami biometrycznymi
Credential Manager integrates biometric prompts into the credential creation and sign-in processes, eliminating the need for providers to manage biometric prompts. As a result, credential providers only need to focus on the results of the create and get flows, augmented with the biometric flow result. This simplified process creates a more efficient and streamlined credential creation and retrieval process.
Zarządzanie kluczami w celu 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ć.
Kontrole uprawnień do 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 dodaje 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 dodaje funkcje i możliwości, które uzupełniają wrażenia użytkownika, gdy urządzenie jest używane w różnych językach.
Czcionka zmiennej CJK
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.
![](https://developer.android.google.cn/static/about/versions/15/images/cjk-variable-font.png?authuser=9&hl=pl)
Uzasadnienie między znakami
Począwszy od Androida 15 tekst można uzasadniać, dodając odstępy między literami za pomocą funkcji JUSTIFICATION_MODE_INTER_CHARACTER
. Funkcja uzasadniania między słowami po raz pierwszy została wprowadzona w Androidzie 8.0 (poziom interfejsu API 26). Funkcja uzasadnienia między znakami zapewnia podobne możliwości w językach, które korzystają ze znaku odstępu do podziału na segmenty, takich jak chiński, japoński i innych.
![](https://developer.android.google.cn/static/about/versions/15/images/none-japanese.png?authuser=9&hl=pl)
JUSTIFICATION_MODE_NONE
.![](https://developer.android.google.cn/static/about/versions/15/images/none-english.png?authuser=9&hl=pl)
JUSTIFICATION_MODE_NONE
.![](https://developer.android.google.cn/static/about/versions/15/images/inter-word-japanese.png?authuser=9&hl=pl)
JUSTIFICATION_MODE_INTER_WORD
.![](https://developer.android.google.cn/static/about/versions/15/images/inter-word-english.png?authuser=9&hl=pl)
JUSTIFICATION_MODE_INTER_WORD
.![](https://developer.android.google.cn/static/about/versions/15/images/inter-character-japanese.png?authuser=9&hl=pl)
JUSTIFICATION_MODE_INTER_CHARACTER
.![](https://developer.android.google.cn/static/about/versions/15/images/inter-character-english.png?authuser=9&hl=pl)
JUSTIFICATION_MODE_INTER_CHARACTER
.Automatyczna konfiguracja podziału wiersza
W Androidzie 13 (poziom API 33) Android zaczął obsługiwać podziały wierszy w języku japońskim i koreańskim. Chociaż podziały na wyrażenia poprawiają czytelność krótkich wierszy tekstu, nie sprawdzają się w przypadku długich wierszy.
Na Androidzie 15 aplikacje mogą teraz stosować podziały wierszy w postaci wyrażenia tylko w przypadku krótkich wierszy tekstu. Służy do tego opcja LINE_BREAK_WORD_STYLE_AUTO
. Ta opcja powoduje wybranie najlepszej opcji stylu słowa dla tekstu.
W przypadku krótkich wierszy tekstu stosuje się podziały wiersza oparte na wyrażeniach działające tak samo jak w przypadku funkcji LINE_BREAK_WORD_STYLE_PHRASE
, jak na tym obrazie:
![](https://developer.android.google.cn/static/about/versions/15/images/line-break-auto-short.png?authuser=9&hl=pl)
LINE_BREAK_WORD_STYLE_AUTO
stosuje podziały wierszy na wyrażenia, aby poprawić czytelność tekstu.
Działa to tak samo jak w przypadku zastosowania właściwości LINE_BREAK_WORD_STYLE_PHRASE
.W przypadku dłuższych wierszy tekstu LINE_BREAK_WORD_STYLE_AUTO
używa stylu słów bez podziału wiersza, działając tak samo jak LINE_BREAK_WORD_STYLE_NONE
, jak na tym obrazie:
![](https://developer.android.google.cn/static/about/versions/15/images/line-break-auto-long.png?authuser=9&hl=pl)
LINE_BREAK_WORD_STYLE_AUTO
nie stosuje stylu słów podziału wiersza, aby zwiększyć czytelność tekstu.
Działa to tak samo jak w przypadku zastosowania właściwości LINE_BREAK_WORD_STYLE_NONE
.Nowa czcionka japońska hentaigana
W Androidzie 15 nowy plik czcionki starej japońskiej hiragany (znanej jako Hentaigana) jest domyślnie w pakiecie. Unikalne kształty postaci Hentaigany nadają dziełom sztuki lub projektowi charakterystycznego charakteru, pomagając jednocześnie zachować odpowiedni przekaz i zrozumienie starożytnych japońskich dokumentów.
![](https://developer.android.google.cn/static/about/versions/15/images/hentaigana-font.png?authuser=9&hl=pl)
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.