Android 12 wprowadza nowe, przydatne funkcje i interfejsy API dla deweloperów. Poniższe sekcje zawierają informacje o funkcjach aplikacji i pierwszych krokach z odpowiednimi interfejsami API.
Szczegółową listę nowych, zmodyfikowanych i usuniętych interfejsów API znajdziesz w raporcie Różnice między interfejsami API. Szczegółowe informacje o nowych interfejsach API znajdziesz w dokumentacji interfejsów API Androida. Nowe interfejsy API są wyróżnione. Aby dowiedzieć się też, w jakich obszarach zmiany na platformie mogą wpływać na Twoje aplikacje, zapoznaj się ze zmianami w działaniu Androida 12 w przypadku aplikacji kierowanych na Androida 12 i wszystkich aplikacji.
Z perspektywy użytkownika
Material You
Android 12 wprowadza nowy język projektowania – Material You, który ułatwia tworzenie spersonalizowanych aplikacji. Aby przenieść do swoich aplikacji wszystkie najnowsze aktualizacje Material Design 3, wypróbuj wersję alfa komponentów Material Design.
Ulepszenia widżetów
Android 12 unowocześnia obecny interfejs Widgets API, aby zwiększyć wygodę użytkowników i programistów korzystających z platformy i programów uruchamiających. Opracowaliśmy przewodnik, który pomoże Ci sprawdzić, czy widżet jest zgodny z Androidem 12, i dodawać do niego nowe funkcje.
Więcej informacji znajdziesz w artykule o ulepszeniach widżetów Androida 12.
Wstawianie treści rozszerzonych
Android 12 wprowadza nowy, ujednolicony interfejs API, który umożliwia aplikacjom pobieranie szczegółowych treści z dowolnego dostępnego źródła: ze schowka, klawiatury lub przeciągania i upuszczania.
Więcej informacji znajdziesz w artykule Otrzymywanie szczegółowych treści.
Interfejs API ekranów powitalnych aplikacji
W przypadku wszystkich aplikacji w Androidzie 12 wprowadziliśmy nową animację z możliwością uruchamiania aplikacji. Zawiera ona ruch w momencie wprowadzenia aplikacji na rynek, ekran powitalny z ikoną aplikacji oraz przejście do samej aplikacji. Więcej informacji znajdziesz w przewodniku dla programistów dotyczącym ekranów powitalnych.
Interfejsy API z zaokrąglonymi rogami
W Androidzie 12 wprowadzamy funkcje RoundedCorner
i WindowInsets.getRoundedCorner(int
position)
, które zapewniają promień i punkt środkowy zaokrąglonych narożników.
Więcej informacji znajdziesz w artykule Zaokrąglone narożniki.
Bogata reakcja haptyczna
Android 12 rozszerza narzędzia do generowania przydatnych informacji o zdarzeniach w interfejsie, angażujących i zachwycających efektów w grach oraz wywołujących u siebie reakcje haptyczne w celu zwiększenia produktywności.
Efekty elementów uruchamiających
Android 12 udostępnia ekspresyjne efekty, takie jak low-tick, które wykorzystują szerszą przepustowość częstotliwości dostępną w najnowszych elementach uruchamiających. Deweloperzy gier mogą teraz korzystać z niezależnych wielu różnych elementów uruchamiających w kontrolerach gier, aby realizować ten sam efekt synchronicznie lub z różnymi efektami haptycznymi na wielu elementach uruchamiających. Deweloperom zalecamy korzystanie z stałych i podstawowych jako elementów składowych bogatych efektów haptycznych – stałych, które ulepszają zdarzenia w interfejsie, i kompozytora reakcji haptycznych do sekwencjonowania podstawowych elementów w celu uzyskania bardziej złożonych efektów. Te interfejsy API można wypróbować na urządzeniach Pixel 4. Nadal współpracujemy z producentami urządzeń, aby zapewniać użytkownikom w całym ekosystemie najnowsze rozwiązania w zakresie technologii haptycznych.
Efekty haptyczne łączone audio
Aplikacje na Androida 12 mogą generować sygnały haptyczne pochodzące z sesji dźwiękowej za pomocą wibracji telefonu. Dzięki temu możesz cieszyć się bardziej wciągającymi doświadczeniami w grach i dźwiękach. Na przykład dzwonki z dźwiękiem haptycznym pomagają zidentyfikować rozmówcę, a gra samochodowa może symulować uczucie surowego terenu.
Więcej informacji znajdziesz w dokumentacji referencyjnej HapticGenerator
.
Wyszukiwanie aplikacji
W Androidzie 12 wprowadzamy AppSearch – wydajną wyszukiwarkę na urządzeniu jako usługę systemową. AppSearch umożliwia aplikacjom indeksowanie uporządkowanych danych i przeszukiwanie ich za pomocą wbudowanych funkcji wyszukiwania pełnotekstowego. Ponadto AppSearch obsługuje natywne funkcje wyszukiwania, takie jak wydajne indeksowanie i pobieranie, obsługa wielu języków oraz ranking trafności.
AppSearch ma 2 rodzaje: lokalny indeks do użycia przez aplikację zgodny ze starszymi wersjami Androida lub centralny indeks obsługiwany dla całego systemu w Androidzie 12. Za pomocą centralnego indeksu Twoja aplikacja może zezwalać na wyświetlanie swoich danych na platformach interfejsu systemu przez zainstalowany w systemie komponent analizy. To, które dane są wyświetlane na platformach interfejsu systemu, zależy od producenta OEM. Dodatkowo Twoja aplikacja może bezpiecznie udostępniać dane innym aplikacjom, umożliwiając im przeszukiwanie tych danych.
Więcej informacji o AppSearch znajdziesz w przewodniku dla programistów. Zacznij korzystać z tej usługi wraz z biblioteką AppSearch Jetpack, która zapewnia łatwą dla programistów platformę interfejsu API oraz obsługuje procesory adnotacji.
Tryb gry
Interwencje interfejsu Game Mode API i interwencji w trybie gry pozwalają zoptymalizować rozgrywkę przez określenie priorytetów takich jak wydajność czy czas pracy na baterii na podstawie ustawień użytkownika lub konfiguracji konkretnej gry.
Więcej informacji znajdziesz w artykule Tryb gry.
Rekomendacje i ulepszenia funkcji obraz w obrazie
Android 12 wprowadza te ulepszenia w trybie obrazu w obrazie:
Obsługa nowych gestów obrazu w obrazie
Android 12 obsługuje teraz gesty przeciągania i powiększania ściągnięciem palców w oknie obrazu w obrazie:
Aby ukryć okno, użytkownik może je przeciągnąć w lewo lub w prawo. Aby cofnąć okno, użytkownik może kliknąć jego widoczną część lub przeciągnąć ją poza nią.
Użytkownik może teraz zmieniać rozmiar okna obrazu w obrazie, korzystając z powiększania lub ściągania palcami.
Zalecane nowe funkcje obsługujące dopracowane przejście w trybie PiP
W Androidzie 12 wprowadzono znaczne zmiany kosmetyczne w animowanych przejściach między oknami pełnoekranowymi i obrazami w obrazie. Zdecydowanie zalecamy wprowadzenie wszystkich obowiązujących zmian. Po wprowadzeniu zmiany automatycznie wyświetlają się na dużych ekranach, np. urządzeniach składanych i tabletach, i nie wymagają dodatkowej pracy.
Do funkcji tych należą:
-
Użyj flagi
setAutoEnterEnabled
, aby płynnie przejść do trybu obraz w obrazie podczas przesuwania palcem w górę do ekranu głównego w trybie nawigacji przy użyciu gestów. Wcześniej Android czekał na zakończenie animacji przesunięcia palcem w górę, aby przejść do ekranu głównego, a następnie znikało w oknie obrazu w obrazie. Płynne animacje przy włączaniu i wychodzeniu z trybu obrazu w obrazie
Flaga
SourceRectHint
jest teraz używana ponownie do implementowania płynniejszej animacji przy włączaniu i wyłączaniu trybu PiP.Nowa flaga interfejsu API wyłączająca płynną zmianę rozmiaru treści innych niż filmy
Flaga
SeamlessResizeEnabled
zapewnia znacznie płynniejszą animację przenikania podczas zmiany rozmiaru treści innych niż wideo w oknie obrazu w obrazie. Wcześniej zmiana rozmiaru treści innych niż filmy w oknie PIP może powodować irytujące artefakty.
Nowe powiadomienia o połączeniach telefonicznych pozwalają określić wagę połączeń przychodzących w określonej kolejności
Android 12 dodaje nowy styl powiadomień Notification.CallStyle
o połączeniach telefonicznych. Dzięki temu szablonowi aplikacja może wskazywać znaczenie aktywnych połączeń przez wyświetlanie na pasku stanu dobrze widocznego elementu z godziną połączenia. Użytkownik może go kliknąć, aby wrócić do rozmowy.
Połączenia przychodzące i trwające są dla użytkowników najważniejsze, dlatego powiadomienia te są umieszczone wyżej w rankingu. Ten ranking umożliwia też systemowi przekierowanie tych priorytetowych połączeń do innych urządzeń.
Zaimplementuj poniższy kod w przypadku wszystkich typów wywołań.
Kotlin
// Create a new call with the user as caller. val incoming_caller = Person.Builder() .setName("Jane Doe") .setImportant(true) .build()
Java
// Create a new call with the user as caller. Person incoming_caller = new Person.Builder() .setName("Jane Doe") .setImportant(true) .build();
Użyj narzędzia forIncomingCall()
, aby utworzyć powiadomienie o stylu połączenia dla połączenia przychodzącego.
Kotlin
// Create a call style notification for an incoming call. val builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent)) .addPerson(incoming_caller)
Java
// Create a call style notification for an incoming call. Notification.Builder builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent)) .addPerson(incoming_caller);
Użyj narzędzia forOngoingCall()
, aby utworzyć powiadomienie stylu połączenia dla trwającej rozmowy.
Kotlin
// Create a call style notification for an ongoing call. val builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forOnGoingCall(caller, hangupIntent)) .addPerson(second_caller)
Java
// Create a call style notification for an ongoing call. Notification.Builder builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forOnGoingCall(caller, hangupIntent)) .addPerson(second_caller);
Aby utworzyć powiadomienie stylu połączenia na potrzeby filtrowania połączenia, użyj funkcji forScreeningCall()
.
Kotlin
// Create a call style notification for screening a call. val builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent)) .addPerson(second_caller)
Java
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent)) .addPerson(second_caller);
Obsługa obrazów wzbogaconych w powiadomieniach
W Androidzie 12 możesz teraz wzbogacić wyświetlanie powiadomień z aplikacji, dodając animowane obrazy w powiadomieniach MessagingStyle()
i BigPictureStyle()
. Możesz też teraz zezwolić użytkownikom na wysyłanie wiadomości graficznych w momencie, gdy odpowiadają na wiadomości w obszarze powiadomień.
Ulepszenia trybu interaktywnego w nawigacji przy użyciu gestów
Android 12 łączy dotychczasowe działanie, aby ułatwić użytkownikom wykonywanie poleceń nawigacyjnych przy użyciu gestów w trybie pojemnym. Dodatkowo Android 12 umożliwia zgodność wsteczną w trybie przyklejonego elementu pełnoekranowego.
Udostępnianie adresów URL ostatnich (tylko Pixel)
Na urządzeniach Pixel użytkownicy mogą teraz udostępniać linki do ostatnio wyświetlanych treści internetowych bezpośrednio z ekranu Ostatnie. Po otwarciu treści w aplikacji użytkownik może otworzyć ekran Ostatnie i znaleźć aplikację, w której oglądał treści, a potem kliknąć przycisk linku, aby skopiować lub udostępnić adres URL.
Więcej informacji znajdziesz w artykule Włączanie udostępniania URL-i w ostatnim czasie.
Prywatność i bezpieczeństwo
Panel prywatności
Na obsługiwanych urządzeniach z Androidem 12 lub nowszym w ustawieniach systemowych pojawia się ekran Panelu prywatności. Na tym ekranie użytkownicy mają dostęp do osobnych ekranów, które wyświetlają się, gdy aplikacje korzystają z informacji o lokalizacji, aparacie i mikrofonach. Na każdym ekranie widać oś czasu, w której różne aplikacje uzyskiwały dostęp do określonego typu danych. Rysunek 1 przedstawia oś czasu dostępu do informacji o lokalizacji.
Aplikacja może przekazywać użytkownikom uzasadnienie, dlaczego korzysta z informacji o lokalizacji, aparacie lub mikrofonie. Uzasadnienie może pojawiać się na nowym ekranie Panelu prywatności, na ekranie uprawnień aplikacji lub na obu tych ekranach.
Uprawnienia Bluetooth
Android 12 wprowadza uprawnienia BLUETOOTH_SCAN
, BLUETOOTH_ADVERTISE
i BLUETOOTH_CONNECT
. Uprawnienia te ułatwiają aplikacjom kierowanym na Androida 12 interakcję z urządzeniami Bluetooth, zwłaszcza tym, które nie wymagają dostępu do lokalizacji urządzenia.
Zaktualizuj deklaracje uprawnień aplikacji dotyczące Bluetootha
Aby przygotować urządzenie do kierowania reklam na Androida 12 lub nowszego, zaktualizuj logikę aplikacji. Zamiast deklarować starszy zestaw uprawnień Bluetooth, zadeklaruj nowoczesny zestaw uprawnień Bluetooth.
Wyszukiwanie grup uprawnień
W Androidzie 12 i nowszych możesz sprawdzić, jak system porządkuje uprawnienia dostarczane przez platformę w grupy uprawnień:
- Aby określić grupę uprawnień, w której system zastosował uprawnienie zdefiniowane na platformie, wywołaj
getGroupOfPlatformPermission()
. - Aby określić uprawnienia zdefiniowane na platformie, które system nadał określonej grupie uprawnień, wywołaj metodę
getPlatformPermissionsForGroup()
.
Ukryj okna nakładki aplikacji
Aby dać deweloperom większą kontrolę nad tym, co widzą użytkownicy, gdy korzystają z aplikacji dewelopera, w Androidzie 12 można ukrywać nakładki wyświetlane przez aplikacje z uprawnieniami SYSTEM_ALERT_WINDOW
.
Po zadeklarowaniu uprawnienia HIDE_OVERLAY_WINDOWS
aplikacja może wywołać metodę setHideOverlayWindows()
, by wskazać, że wszystkie okna typu TYPE_APPLICATION_OVERLAY
powinny być ukryte, gdy widoczne jest własne okno aplikacji. Aplikacje mogą to robić, gdy wyświetlają poufne ekrany, np. w procesie potwierdzania transakcji.
Aplikacje, które wyświetlają okna typu TYPE_APPLICATION_OVERLAY
, powinny uwzględniać alternatywy, które mogą pasować do ich zastosowań, np. obraz w obrazie lub dymki.
Flaga ochrony uprawnień znanych sygnatariuszy
Począwszy od Androida 12 atrybut knownCerts
uprawnień na poziomie podpisu umożliwia odwoływanie się do skrótów znanych certyfikatów podpisywania w czasie deklaracji.
Twoja aplikacja może zadeklarować ten atrybut i używać flagi knownSigner
, aby umożliwić urządzeniom i aplikacjom przyznawanie uprawnień do podpisu innym aplikacjom bez konieczności podpisywania aplikacji w momencie produkcji i wysyłki urządzenia.
Atest właściwości urządzenia
Android 12 rozszerza zbiór aplikacji, które mogą weryfikować właściwości urządzenia znajdujące się w certyfikacie atestu, gdy te aplikacje generują nowy klucz.
Od Androida 9 (poziom interfejsu API 28) właściciele zasad dotyczących urządzeń korzystający z Keymastera w wersji 4.0 lub nowszej mogą sprawdzać właściwości urządzenia w tych certyfikatach atestu. Od Androida 12 każda aplikacja kierowana na Androida 12 (poziom interfejsu API 31) lub nowszego może przeprowadzać weryfikację za pomocą metody setDevicePropertiesAttestationIncluded()
.
Wygenerowane właściwości urządzenia obejmują te pola Build
:
BRAND
DEVICE
MANUFACTURER
MODEL
PRODUCT
Działania związane z powiadomieniami na ekranie blokady
Od Androida 12 klasa Notification.Action.Builder
obsługuje metodę setAuthenticationRequired()
, która pozwala aplikacji wymagać odblokowania urządzenia przed wywołaniem określonego działania związanego z powiadomieniem. Ta metoda zapewnia dodatkową warstwę zabezpieczeń
w przypadku powiadomień na zablokowanych urządzeniach.
Zlokalizowane ciągi znaków dla promptów biometrycznych
Android 12 wprowadza nowe interfejsy API, które pomagają usprawnić działanie uwierzytelniania biometrycznego w Twojej aplikacji. Nowa zagnieżdżona klasa BiometricManager.Strings
zawiera metody getButtonLabel()
, getPromptMessage()
i getSettingName()
, które umożliwiają aplikacji pobieranie czytelnej dla użytkownika i zlokalizowanej etykiety przycisku, komunikatu lub nazwy ustawienia aplikacji. Wykorzystaj te etykiety, aby tworzyć bardziej precyzyjne instrukcje dla użytkownika związane z używanymi metodami uwierzytelniania biometrycznego, np. „Używaj rozpoznawania twarzy” lub „Aby kontynuować, użyj odcisku palca”.
Wykrywanie phishingu w aplikacjach do obsługi wiadomości (tylko Pixel)
Na obsługiwanych urządzeniach Pixel Android 12 wykrywa próby wyłudzenia informacji w przypadku wiadomości odebranych w popularnych komunikatorach. System wykrywa podejrzane działania za pomocą systemów uczących się na urządzeniu. Po wykryciu takiego powiadomienia system wyświetla na górze interfejsu aplikacji do obsługi wiadomości nakładkę z ostrzeżeniem, aby ostrzegać użytkowników. Na przykład wykrywanie phishingu może ostrzegać użytkowników o tych potencjalnych zagrożeniach:
- podejrzane prośby, np. o wysłanie kodu, pieniędzy itp.;
- Niezaufane adresy URL
- Szkodliwe załączniki
- Linki do złośliwych aplikacji
Oprócz ostrzegania użytkownika nakładka umożliwia też zgłoszenie podejrzanej wiadomości i przekazanie opinii o ostrzeżeniach wydanych przez system.
Deweloperzy mogą zrezygnować z tej funkcji, dodając nowy tag metadanych zawierający ciąg com.google.android.ALLOW_PHISHING_DETECTION
w plikach manifestu aplikacji. Na przykład:
<manifest>
<application android:name="com.messagingapp">
<meta-data android:name="com.google.android.ALLOW_PHISHING_DETECTION" android:value="false" />
</application>
</manifest>
Multimedia
Transkodowanie zgodnych multimediów
Począwszy od Androida 12 (poziom interfejsu API 31), system może automatycznie transkodować filmy HEVC(H.265) i HDR (HDR10 i HDR10+) nagrane za pomocą urządzenia na format AVC (H.264), który jest powszechnie zgodny ze standardowymi odtwarzaczami. Dzięki temu korzysta się z nowoczesnych kodeków, które są dostępne bez negatywnego wpływu na zgodność ze starszymi aplikacjami.
Więcej informacji znajdziesz w sekcji Transkodowanie zgodnych multimediów.
Klasa wydajności
Android 12 wprowadza standard o nazwie klasa wydajności. Klasa wydajności określa możliwości sprzętu wykraczające poza podstawowe wymagania Androida. Każde urządzenie z Androidem deklaruje obsługiwaną klasę wydajności. Deweloperzy mogą sprawdzać klasę wydajności urządzenia w czasie działania i udostępniać uaktualnione funkcje, które w pełni wykorzystują możliwości urządzenia.
Więcej informacji znajdziesz w sekcji Klasa wydajności.
Ulepszenia kodowania filmów
Android 12 definiuje standardowy zestaw kluczy do kontrolowania wartości parametru kwantyzacji (QP) na potrzeby kodowania wideo, co pozwala deweloperom uniknąć kodowania konkretnego dostawcy.
Nowe klucze są dostępne w interfejsie API MediaFormat
oraz w bibliotece NDK Media.
Począwszy od koderów wideo na Androida 12, które wymagają minimalnego progu jakości. Gwarantuje to, że podczas kodowania filmów o dużej złożoności nie będą one miały bardzo niskiej jakości.
Aktywność audio
Począwszy od Androida 12 (poziom interfejsu API 31), gdy aplikacja żąda aktywności audio, a inna aplikacja jest w trakcie odtwarzania, system wycisza odtwarzaną aplikację.
Więcej informacji znajdziesz w sekcji Koncentracja na dźwięku w Androidzie 12 i nowszych.
Aktualizacje MediaDrm
Aby określić, czy bezpieczny komponent dekodera jest wymagany w obecnych interfejsach API MediaDrm
, wykonaj te czynności:
- Utwórz
MediaDrm
. - Otwórz sesję, aby uzyskać jej identyfikator.
- Utwórz
MediaCrypto
przy użyciu identyfikatora sesji. - Będziesz dzwonić pod numer
MediaCrypto.requiresSecureDecoderComponent(mimeType)
.
Dzięki nowym metodom requiresSecureDecoder(@NonNull String mime)
i requiresSecureDecoder(@NonNull String mime, @SecurityLevel int level)
możesz to określić, gdy tylko utworzysz MediaDrm
.
Aparat
Rozszerzenia dostawców Camera2
Wielu producentów urządzeń stworzyło niestandardowe rozszerzenia do aparatu, np. Bokeh, HDR, Tryb nocny i inne – których aplikacje chcą używać na swoich urządzeniach w bardziej atrakcyjny sposób. Biblioteka CameraX obsługuje już te niestandardowe rozszerzenia dostawców. W Androidzie 12 te rozszerzenia dostawców są teraz widoczne bezpośrednio na platformie.
Dzięki temu aplikacje ze złożonymi implementacjami Camera2
mogą korzystać z rozszerzeń dostawców bez konieczności wprowadzania istotnych zmian w starszym kodzie. Interfejsy API rozszerzeń Camera2 udostępniają dokładnie ten sam zestaw rozszerzeń co w CameraX. Są one już obsługiwane na wielu różnych urządzeniach, więc możesz ich używać bez dodatkowej konfiguracji.
Więcej informacji: CameraExtensionCharacteristics
.
Obsługa czujnika aparatu Quad Bayer
Obecnie wiele urządzeń z Androidem wyposażono w czujniki aparatu o bardzo wysokiej rozdzielczości, zwykle zgodne ze wzorem Quad lub Nona Bayer, które zapewniają dużą elastyczność pod względem jakości obrazu i działania przy słabym oświetleniu. Android 12 wprowadza nowe interfejsy API platformy, które pozwalają aplikacjom innych firm w pełni korzystać z tych wszechstronnych czujników. Nowe interfejsy API obsługują unikalne zachowanie tych czujników oraz uwzględniają to, że mogą one obsługiwać różne konfiguracje strumieni i ich kombinacje w trybie pełnej rozdzielczości lub w trybie maksymalnej rozdzielczości oraz w trybie „domyślnym”.
Grafika i obrazy
Przyznawanie aplikacjom bezpośredniego dostępu do śladów nagrobków
Począwszy od Androida 12 możesz uzyskać dostęp do macierzystego nagrobka awarii aplikacji w postaci bufora protokołu za pomocą metody ApplicationExitInfo.getTraceInputStream()
. Bufor protokołu jest zserializowany za pomocą tego schematu.
Wcześniej jedynym sposobem uzyskania dostępu do tych informacji był skorzystanie z narzędzia Android Debug Bridge (adb).
Więcej informacji znajdziesz w artykule na temat zapewniania aplikacjom bezpośredniego dostępu do logów czasu.
Obsługa obrazów AVIF
Android 12 wprowadza obsługę obrazów w formacie AV1 Image File Format (AVIF). AVIF to format kontenera dla obrazów i sekwencji obrazów kodowanych za pomocą technologii AV1. AVIF wykorzystuje treść zakodowaną w obrębie klatki z kompresji wideo. Znacznie poprawia to jakość zdjęć przy takim samym rozmiarze pliku w porównaniu ze starszymi formatami, np. JPEG. Szczegółowy opis zalet tego formatu znajdziesz w poście na blogu Jake'a Archibalda.
Łatwiejsze rozmycie, filtry kolorów i inne efekty
Android 12 dodaje do View
i hierarchii renderowania nowe efekty graficzne, takie jak rozmycia, filtry kolorów, efekty cieniowania na Androidzie itp. RenderEffect
. Efekty można łączyć jako efekty łańcuchowe
(składające się z efektu wewnętrznego i zewnętrznego) lub jako efekty mieszane. Ze względu na ograniczoną moc obliczeniową różne urządzenia z Androidem mogą nie obsługiwać tej funkcji.
Efekty można też zastosować do bazowego elementu RenderNode
dla View
, wywołując metodę View.setRenderEffect(RenderEffect)
.
Aby zaimplementować RenderEffect
:
view.setRenderEffect(RenderEffect.createBlurEffect(radiusX, radiusY, SHADER_TILE_MODE))
Natywne dekodowanie obrazów animowanych
W Androidzie 12 interfejs API NDK ImageDecoder
został rozszerzony, aby dekodować wszystkie dane o klatkach i czasie z obrazów zawierających animowany GIF i animowany format plików WebP. Gdy wprowadzono go w Androidzie 11, dekodował tylko pierwszy obraz z animacji w tych formatach.
Aby jeszcze bardziej zmniejszyć rozmiar plików APK i czerpać korzyści z przyszłych aktualizacji związanych z bezpieczeństwem i wydajnością, używaj ImageDecoder
zamiast bibliotek zewnętrznych.
Więcej informacji o interfejsie API znajdziesz w dokumentacji API i przykładzie na GitHubie.
Połączenia
Nieaktywne aplikacje towarzyszące
Aby aplikacje towarzyszące pozostawały uruchomione w celu zarządzania urządzeniem, Android 12 wprowadza interfejsy API, które:
- Umożliwia wybudzanie aplikacji, gdy urządzenie towarzyszące znajduje się w zasięgu.
- Pamiętaj, że proces będzie kontynuowany, gdy urządzenie będzie w zasięgu.
Aby korzystać z interfejsów API, urządzenia muszą być połączone za pomocą Menedżera urządzeń towarzyszących. Więcej informacji znajdziesz w opisach CompanionDeviceManager.startObservingDevicePresence()
i CompanionDeviceService.onDeviceAppeared()
.
Profile Menedżera urządzeń towarzyszących
Aplikacje partnerów na Androidzie 12 (poziom interfejsu API 31) i nowszych mogą używać profili urządzeń towarzyszących podczas łączenia się z zegarkiem. Korzystanie z profilu upraszcza proces rejestracji, łącząc w jednym kroku przyznawanie zestawu uprawnień dla konkretnego typu urządzenia.
Zgrupowane uprawnienia są przyznawane aplikacji towarzyszącej, gdy urządzenie się połączy, i są aktywne tylko wtedy, gdy urządzenie jest powiązane. Usunięcie aplikacji lub powiązania spowoduje utratę uprawnień.
Więcej informacji: AssociationRequest.Builder.setDeviceProfile()
.
Ulepszenia szacowania przepustowości
W Androidzie 12 możliwości szacowania przepustowości udostępniane przez getLinkDownstreamBandwidthKbps()
i getLinkUpstreamBandwidthKbps()
są ulepszone zarówno w przypadku połączeń Wi-Fi, jak i komórkowych. Zwracane wartości przedstawiają teraz średnią ważoną przez użytkownika średnią przepustowość według operatora lub sieci Wi-Fi, typ sieci i poziom sygnału we wszystkich aplikacjach na urządzeniu.
Może to zwrócić bardziej dokładne i realistyczne oszacowanie oczekiwanej przepustowości oraz podać szacunki przy uruchamianiu aplikacji „na zimno” oraz wymaga mniej cykli w porównaniu z innymi metodami szacowania przepustowości.
Ulepszenia Wi-Fi Aware (NAN)
Android 12 wprowadza kilka ulepszeń do Wi-Fi Aware:
- Na urządzeniach z Androidem 12 (poziom interfejsu API 31) lub nowszym możesz użyć wywołania zwrotnego
onServiceLost()
, aby otrzymywać alerty, gdy aplikacja utraci wykrytą usługę z powodu zatrzymania lub przeniesienia usługi poza zasięg. - Zmienia się sposób konfigurowania wielu ścieżek danych (ścieżek danych NAN). Wcześniejsze wersje używały komunikatów L2 do wymiany informacji o inicjatorach, co spowodowało opóźnienie. Na urządzeniach z Androidem 12 lub nowszym odpowiedź (serwer) można skonfigurować tak, aby akceptowała wszystkie połączenia równorzędne, co oznacza, że nie trzeba od razu znać informacji o inicjatorze. Przyspiesza to wywoływanie ścieżki danych i umożliwia wiele połączeń między punktami za pomocą tylko jednego żądania sieciowego.
- Aby zapobiec odrzucaniu przez platformę żądań wykrywania lub połączenia z powodu wyczerpania zasobów, na urządzeniach z Androidem 12 lub nowszym możesz wywoływać metodę
WifiAwareManager.getAvailableAwareResources()
. Wartość zwracana tej metody pozwala sprawdzić liczbę dostępnych ścieżek danych, liczbę dostępnych sesji publikowania oraz liczbę dostępnych sesji subskrybowania.
Równoczesne połączenie peer-to-peer + połączenie internetowe
Jeśli urządzenia kierowane na Androida 12 (poziom interfejsu API 31) lub nowszego działają na urządzeniach obsługujących sprzęt, użycie połączeń peer-to-peer nie spowoduje odłączenia obecnego połączenia Wi-Fi podczas tworzenia połączenia z urządzeniem równorzędnym. Aby sprawdzić, czy ta funkcja jest obsługiwana, użyj adresu WifiManager.isMultiStaConcurrencySupported()
.
Włącz wyłączenie ekranu dla płatności NFC
W aplikacjach kierowanych na Androida 12 i nowsze wersje możesz włączyć płatności NFC bez włączonego ekranu urządzenia, ustawiając requireDeviceScreenOn
na false
. Więcej informacji o płatnościach z użyciem NFC przy wyłączonym lub zablokowanym ekranie znajdziesz w artykule Zachowanie ekranu przy wyłączonym lub zablokowanym ekranie.
Pamięć
Android 12 udostępnia te funkcje zarządzania miejscem na dane:
- Obsługa magazynu multimediów
MediaDocumentsProvider
, gdy aplikacja pobiera identyfikator URI mediów, który jest odpowiednikiem identyfikatora URI danego dostawcy dokumentów. - Katalog nagrań głosowych.
- Uprawnienie
MANAGE_MEDIA
, które umożliwia aplikacji wykonywanie działań związanych z zarządzaniem multimediami bez wyświetlania użytkownikowi okna z potwierdzeniem każdej operacji. - Aplikacje, które mają zarówno uprawnienie
MANAGE_EXTERNAL_STORAGE
, jak iQUERY_ALL_PACKAGES
(np. aplikacje do zarządzania plikami), mogą wywoływać działanie niestandardowe służące do zarządzania miejscem na dane w innej aplikacji, o ile ta druga aplikacja tworzy aktywność niestandardową.
Główna funkcja
Automatyczne aktualizacje aplikacji
Android 12 wprowadza metodę setRequireUserAction()
w aplikacjach, które korzystają z interfejsu API PackageInstaller
.
Ta metoda umożliwia aplikacjom instalatora aktualizowanie aplikacji bez konieczności potwierdzania działania użytkownika.
Informacje o chipsetu urządzenia
Android 12 dodaje do android.os.Build
2 stałe, które udostępniają informacje o dostawcy i modelu układu SOC za pomocą pakietu SDK. Możesz pobrać te informacje, wywołując odpowiednie wywołania Build.SOC_MANUFACTURER
i Build.SOC_MODEL
.
Aktualizacje podstawowych interfejsów API Java
Na podstawie próśb i współpracy z deweloperami dodaliśmy w Androidzie 12 te biblioteki podstawowe:
Zajęcia | Interfejsy API |
---|---|
java.lang.Deprecated
|
|
java.lang.Byte
|
|
java.lang.Short
|
|
java.lang.Math
|
|
java.lang.StrictMath
|
|
java.util.Set
|
copyOf()
|
java.util.Map
|
copyOf()
|
java.util.List
|
copyOf()
|
java.time.Duration
|
|
java.time.LocalTime
|