Android 12 wprowadza programistów – świetne nowe funkcje i interfejsy API. Poniższe sekcje pomogą Ci poznać funkcje Twoich aplikacji i rozpocząć korzystanie 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ę, w jakich obszarach zmiany na platformie mogą wpłynąć na Twoje aplikacje, zapoznaj się ze zmianami w działaniu Androida 12 w przypadku aplikacji kierowanych na Androida 12 oraz wszystkich aplikacji.
Z perspektywy użytkownika
Material You
Android 12 wprowadza nowy język projektowania o nazwie Material You, który pomaga tworzyć bardziej spersonalizowane, piękne aplikacje. Aby zastosować w swoich aplikacjach wszystkie najnowsze aktualizacje Material Design 3, wypróbuj wersję alfa Material Design Komponenty.
Ulepszenia widżetów
Android 12 ulepsza dotychczasowy interfejs Widgets API, aby zapewnić użytkownikom i programistom większą wygodę korzystania 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 jak odświeżyć go o nowe funkcje.
Więcej informacji znajdziesz w artykule o ulepszeniach widżetów w Androidzie 12.
Wstawianie treści multimedialnych
Android 12 wprowadza nowy, ujednolicony interfejs API, który umożliwia aplikacji odbieranie szczegółowych treści z dowolnego dostępnego źródła: schowka, klawiatury oraz funkcji przeciągania i upuszczania.
Więcej informacji znajdziesz w artykule Otrzymywanie treści sformatowanych.
Interfejs API ekranów powitalnych aplikacji
Android 12 wprowadza nową animację uruchamiania aplikacji w przypadku wszystkich aplikacji. Obejmuje ona ruch w aplikacji od momentu wprowadzenia, ekran powitalny z ikoną aplikacji oraz przejście do samej aplikacji. Więcej informacji znajdziesz w przewodniku dla programistów ekranów powitalnych.
Interfejsy API z zaokrąglonym rogiem
W Androidzie 12 wprowadziliśmy RoundedCorner
i WindowInsets.getRoundedCorner(int
position)
, które określają promień i punkt środkowy zaokrąglonych rogów.
Więcej informacji znajdziesz w artykule Zaokrąglone rogi.
Bogate możliwości reakcji haptycznych
Android 12 obejmuje narzędzia do generowania informacji haptycznych w przypadku zdarzeń interfejsu, wciągające i zachwycające efekty dla graczy oraz czujne reakcje haptyczne zwiększające produktywność.
Efekty uruchamiające
Android 12 udostępnia wyraziste efekty, takie jak niskie skoki, które wykorzystują większą przepustowość częstotliwości najnowocześniejszych urządzeń wykonawczych. Twórcy gier mają teraz dostęp do wielu różnych elementów wykonawczych niezależnie w kontrolerach gry, aby zapewnić synchronicznie ten sam efekt lub różne efekty haptyczne na wielu urządzeniach uruchamiających. Programistom zalecamy korzystanie ze stałych i elementów podstawowych jako elementów konstrukcyjnych zapewniających bogate efekty haptyczne – stałe do udoskonalania zdarzeń interfejsu oraz mechanizm haptyczny do sekwencjonowania elementów podstawowych w celu uzyskania bardziej złożonych efektów. Te interfejsy API można wypróbować na urządzeniach Pixel 4. Nieustannie współpracujemy z producentami urządzeń, aby zapewnić użytkownikom w całym ekosystemie możliwość korzystania z najnowszych funkcji haptycznych.
Efekty haptyczne sprzężone z dźwiękiem
Aplikacje na Androida 12 mogą generować reakcje haptyczne po sesji dźwiękowej, używając wibracji w telefonie. Dzięki temu możemy bardziej wciągające odczucia związane z grami i dźwiękiem. Na przykład dzwonki z reakcją haptyczną mogą pomagać w rozpoznawaniu rozmówcy, a gra symulacyjna może symulować wrażenie nierównego terenu.
Więcej informacji znajdziesz w dokumentacji referencyjnej HapticGenerator
.
Wyszukiwanie aplikacji
Android 12 wprowadza jako usługę systemową AppSearch – bardzo wydajną wyszukiwarkę działającą na urządzeniu. AppSearch umożliwia aplikacjom indeksowanie uporządkowanych danych i przeszukiwanie ich przy użyciu wbudowanych funkcji wyszukiwania pełnotekstowego. Dodatkowo AppSearch obsługuje natywne funkcje wyszukiwania, takie jak bardzo skuteczne indeksowanie i pobieranie danych, obsługa wielu języków czy ranking trafności.
AppSearch ma 2 rodzaje: lokalny indeks, którego możesz używać przez aplikację, zgodny ze starszymi wersjami Androida, lub indeks centralny dla całego systemu w Androidzie 12. Korzystając z centralnego indeksu, aplikacja może zezwolić na wyświetlanie swoich danych na platformach interfejsu systemu przez wstępnie zainstalowany w systemie komponent analityczny. To, które dane są wyświetlane na interfejsach systemu, zależy od producenta OEM. Aplikacja może też bezpiecznie udostępniać dane innym aplikacjom, aby mogły one przeszukiwać również te dane.
Więcej informacji o usłudze AppSearch znajdziesz w przewodniku dla programistów. Zacznij używać jej z biblioteką AppSearch Jetpack, która zapewnia łatwy w obsłudze interfejs API oraz obsługuje procesor adnotacji.
Tryb gry
Interfejs Game Mode API i interwencje w trybie gry pozwalają zoptymalizować rozgrywkę przez nadanie priorytetów takich cechom jak wydajność czy czas pracy na baterii na podstawie ustawień użytkownika i konfiguracji gier.
Więcej informacji znajdziesz w artykule Tryb gry.
Rekomendacje i ulepszenia dotyczące funkcji obraz w obrazie (PIP)
Android 12 wprowadza te ulepszenia trybu obraz w obrazie:
Obsługa nowych gestów obrazu w obrazie
Android 12 obsługuje teraz gesty powiększania i powiększania za pomocą ściągnięcia palców w oknie PIP:
Aby umieścić okno w skrypcie, użytkownik może je przeciągnąć w lewo lub w prawo. Aby przywrócić okno ze schowka, użytkownik może kliknąć widoczną część okna ze schowka lub ją przeciągnąć.
Użytkownik może teraz zmieniać rozmiar okna PIP za pomocą ściągnięcia palcami.
Polecane nowe funkcje, które wspierają dopracowaną zmianę obrazu w obrazie
W Androidzie 12 wprowadzono znaczne ulepszenia kosmetyczne w animowanych przejściach między oknami pełnoekranowymi a oknami PIP. Zdecydowanie zalecamy wprowadzenie wszystkich odpowiednich zmian. Gdy to zrobisz, zostaną one automatycznie skalowane na duże ekrany, takie jak urządzenia składane i tablety, bez konieczności wykonywania dodatkowych czynności.
Te funkcje to:
-
Użyj flagi
setAutoEnterEnabled
, aby zapewnić płynniejsze przejście 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 przesuwania w górę do domu, a następnie zanikanie w oknie PIP. Płynniejsze animacje po przejściu w tryb obrazu w obrazie i wyjściu z niego
Flaga
SourceRectHint
jest teraz używana do zapewnienia płynniejszej animacji po włączeniu i zamknięciu trybu PIP.Nowa flaga interfejsu API wyłączająca płynną zmianę rozmiaru w przypadku 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ż wideo w oknie PIP mogła powodować zjawiska wizualne.
Powiadomienia o nowych połączeniach telefonicznych pozwalające na określenie ważności połączeń przychodzących
Android 12 dodaje nowy styl powiadomień Notification.CallStyle
w przypadku połączeń telefonicznych. Użycie tego szablonu pozwala aplikacji sygnalizować znaczenie aktywnych połączeń za pomocą dobrze widocznego elementu, który na pasku stanu pokazuje godzinę połączenia. Użytkownik może kliknąć ten element, aby wrócić do połączenia.
Połączenia przychodzące i trwające są najważniejsze dla użytkowników, więc te powiadomienia są wyświetlane w pierwszej kolejności w cieniu. Dzięki temu system może też potencjalnie przekazywać priorytetowe połączenia na inne urządzenia.
Wdróż poniższy kod w przypadku wszystkich typów połączeń.
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 o 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);
Użyj narzędzia forScreeningCall()
, aby utworzyć powiadomienie o stylu połączenia na potrzeby filtrowania połączenia.
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 wzbogaconych obrazów w powiadomieniach
W Androidzie 12 możesz zwiększyć jakość powiadomień w aplikacji, dodając animowane obrazy w powiadomieniach MessagingStyle()
i BigPictureStyle()
. Aplikacja może też teraz zezwalać użytkownikom na wysyłanie wiadomości graficznych, gdy odpowiadają na wiadomości w obszarze powiadomień.
Ulepszenia trybu pojemnego dotyczącego nawigacji przy użyciu gestów
Android 12 scala dotychczasowe zachowania, aby ułatwić użytkownikom wykonywanie poleceń nawigacyjnych przy użyciu gestów w trybie pojemnym. Android 12 zapewnia też zgodność wsteczną w trybie pojemnym.
Udostępnianie adresów URL ostatnich (tylko Pixel)
Na urządzeniach Pixel użytkownicy mogą teraz udostępniać linki do ostatnio oglądanych treści z internetu bezpośrednio z ekranu Ostatnio wyświetlane. Po otwarciu treści w aplikacji użytkownik może przesunąć palcem do ekranu Ostatnie i znaleźć aplikację, w której przeglądał materiał, a następnie kliknąć przycisk linku, aby skopiować lub udostępnić adres URL.
Więcej informacji znajdziesz w sekcji Włączanie udostępniania najnowszych adresów URL.
Prywatność i bezpieczeństwo
Panel prywatności
Na obsługiwanych urządzeniach z Androidem 12 lub nowszym w ustawieniach systemowych pojawi się ekran Panel prywatności. Na tym ekranie użytkownicy mają dostęp do osobnych ekranów, które pokazują, kiedy aplikacja uzyskuje dostęp do informacji o lokalizacji, aparacie i mikrofonie. Na każdym ekranie widać oś czasu z danymi konkretnego typu. Rysunek 1 przedstawia oś czasu dostępu do informacji o lokalizacji.
Aplikacja może uzasadnić użytkownikom dostęp do informacji o lokalizacji, aparacie lub mikrofonie. Uzasadnienie może się pojawić 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
. Te uprawnienia ułatwiają aplikacjom 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 Bluetooth
Aby przygotować urządzenie do kierowania na Androida 12 lub nowszego, zaktualizuj logikę aplikacji. Zamiast deklarować starszy zestaw uprawnień dotyczących Bluetootha, zadeklaruj nowocześniejszy zestaw uprawnień dotyczących Bluetootha.
Wyszukiwanie grup uprawnień
W Androidzie 12 lub nowszym możesz zapytać, jak system porządkuje uprawnienia udostępniane na platformie w grupy uprawnień:
- Aby określić grupę uprawnień, do której system umieścił uprawnienie zdefiniowane przez platformę, wywołaj
getGroupOfPlatformPermission()
. - Aby określić uprawnienia zdefiniowane przez platformę, które system ustawił w danej grupie uprawnień, wywołaj
getPlatformPermissionsForGroup()
.
Ukryj okna nakładki aplikacji
Aby dać deweloperom większą kontrolę nad tym, co widzą użytkownicy podczas interakcji z ich aplikacją, w Androidzie 12 wprowadziliśmy możliwość ukrywania okien nakładanych wyświetlanych przez aplikacje z uprawnieniami SYSTEM_ALERT_WINDOW
.
Po zadeklarowaniu uprawnienia HIDE_OVERLAY_WINDOWS
aplikacja może wywołać setHideOverlayWindows()
, aby wskazać, że wszystkie okna typu TYPE_APPLICATION_OVERLAY
powinny być ukryte, gdy widoczne jest własne okno aplikacji. Aplikacje mogą korzystać z tej opcji w przypadku wyświetlania poufnych ekranów, np. procesu potwierdzania transakcji.
Aplikacje z oknami typu TYPE_APPLICATION_OVERLAY
powinny uwzględniać alternatywne rozwiązania, takie jak obraz w obrazie czy bąbelki.
Flaga ochrony uprawnień znanych sygnatariuszy
Począwszy od Androida 12 atrybut knownCerts
dotyczący uprawnień na poziomie podpisu umożliwia odwoływanie się do skrótów znanych certyfikatów podpisywania w czasie deklaracji.
Aplikacja może zadeklarować ten atrybut i użyć flagi knownSigner
, aby umożliwić urządzeniom i aplikacjom udzielanie uprawnień do podpisu innym aplikacjom bez konieczności podpisywania aplikacji podczas produkcji i dostawy urządzenia.
Atestacja właściwości urządzenia
Android 12 rozszerza zestaw aplikacji, które mogą weryfikować właściwości urządzenia uwzględnione w certyfikacie atestu, gdy te aplikacje wygenerują nowy klucz.
Od Androida 9 (poziom interfejsu API 28) właściciele zasad dotyczących urządzeń (IOD) korzystający z Keymaster w wersji 4.0 lub nowszej mogą weryfikować właściwości urządzenia w tych certyfikatach atestu. Od Androida 12 wszystkie aplikacje kierowane na Androida 12 (poziom interfejsu API 31) lub nowszego mogą przeprowadzić tę weryfikację za pomocą metody setDevicePropertiesAttestationIncluded()
.
Wygenerowane właściwości urządzenia zawierają te pola Build
:
BRAND
DEVICE
MANUFACTURER
MODEL
PRODUCT
Bezpieczne działania związane z powiadomieniami na ekranie blokady
Począwszy od Androida 12 klasa Notification.Action.Builder
obsługuje metodę setAuthenticationRequired()
, która pozwala aplikacji wymagać odblokowania urządzenia, zanim wywoła określone działanie powiadomienia. Metoda ta stanowi dodatkową warstwę zabezpieczeń
do powiadomień na zablokowanych urządzeniach.
Możliwe do lokalizowania ciągi znaków BiometricPrompt
Android 12 wprowadza nowe interfejsy API, które pomagają poprawić wrażenia użytkowników korzystających z uwierzytelniania biometrycznego w aplikacjach. Nowa zagnieżdżona klasa BiometricManager.Strings
zawiera metody getButtonLabel()
, getPromptMessage()
i getSettingName()
, dzięki którym aplikacja może pobrać czytelną i zlokalizowaną etykietę przycisku, komunikat z promptem lub nazwę ustawienia aplikacji. Dzięki tym etykietom możesz tworzyć bardziej precyzyjne instrukcje dla użytkownika, dostosowane do używanych metod 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 uruchamia wykrywanie phishingu w przypadku wiadomości otrzymywanych w popularnych komunikatorach. Do wykrywania podejrzanych działań system wykorzystuje uczenie maszynowe działające na urządzeniu. Po wykryciu błędu system wyświetla nad interfejsem aplikacji do obsługi wiadomości nakładkę bezpieczeństwa, aby ostrzegać użytkowników. Wykrywanie phishingu może na przykład ostrzegać użytkowników o tych potencjalnych zagrożeniach:
- Podejrzane prośby, np. o wysłanie kodu, pieniędzy itp.
- Niezaufane adresy URL
- Złośliwe załączniki
- linki do szkodliwych aplikacji,
Poza ostrzeżeniem użytkownika nakładka umożliwia też zgłoszenie podejrzanej wiadomości i przekazanie opinii o ostrzeżeniach wystawionych 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 na urządzeniu na format AVC (H.264), który jest powszechnie zgodny z standardowymi odtwarzaczami. Pozwala to na wykorzystanie nowoczesnych kodeków, gdy są one dostępne, bez utraty zgodności ze starszymi aplikacjami.
Więcej informacji znajdziesz w artykule na temat transkodowania zgodnych multimediów.
Klasa wydajności
Android 12 wprowadza standard nazywany klasą wydajności. Klasa wydajności określa możliwości sprzętowe wykraczające poza podstawowe wymagania Androida. Każde urządzenie z Androidem deklaruje klasę wydajności, którą obsługuje. Deweloperzy mogą sprawdzać klasę wydajności urządzenia w czasie działania i udostępniać ulepszone funkcje, które w pełni wykorzystują możliwości urządzenia.
Więcej informacji znajdziesz w sekcji Klasa wydajności.
Ulepszenia kodowania wideo
Android 12 definiuje standardowy zestaw kluczy do kontrolowania wartości parametru kwantyzacji (QP) przy kodowaniu wideo, co pozwala programistom uniknąć kodu konkretnego dostawcy.
Nowe klucze są dostępne w interfejsie API MediaFormat
oraz w bibliotece NDK Media.
Począwszy od Androida 12 kodery wideo wymuszają minimalny próg jakości. Dzięki temu użytkownicy nie odczują bardzo niskiej jakości kodowania filmów o dużej złożoności scen.
Aktywność audio
Począwszy od Androida 12 (poziom interfejsu API 31), gdy aplikacja poprosi o fokus, podczas gdy inna aplikacja będzie zaznaczana i odtwarza, system zaciemnia odtwarzaną aplikację.
Więcej informacji znajdziesz w artykule Tryb audio w Androidzie 12 i nowszych.
Aktualizacje MediaDrm
Aby określić, czy bieżące interfejsy API MediaDrm
wymagają bezpiecznego dekodera, wykonaj te czynności:
- Utwórz
MediaDrm
. - Otwórz sesję, aby uzyskać identyfikator sesji.
- Utwórz
MediaCrypto
, korzystając z 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 dostawcy Camera2
Wielu naszych partnerów, producentów urządzeń, stworzyło niestandardowe rozszerzenia do aparatów (takie jak Bokeh, HDR czy tryb nocny), aby aplikacje mogły korzystać z różnych funkcji na swoich urządzeniach. Biblioteka CameraX obsługuje już te niestandardowe rozszerzenia dostawców. W Androidzie 12 rozszerzenia od dostawców są teraz dostępne bezpośrednio na platformie.
Dzięki temu aplikacje ze złożonymi implementacjami Camera2
mogą korzystać z rozszerzeń dostawców bez konieczności wprowadzania znaczących zmian w starszym kodzie. Interfejsy Camera2 Extension API udostępniają dokładnie ten sam zestaw rozszerzeń co w Aparacie X. Są one już obsługiwane na wielu różnych urządzeniach, więc można ich używać bez dodatkowej konfiguracji.
Więcej informacji: CameraExtensionCharacteristics
.
Obsługa czujnika aparatu Quad Bayer
Wiele urządzeń z Androidem jest obecnie wyposażonych w czujniki aparatu o bardzo wysokiej rozdzielczości, zwykle w modelach Quad lub Nona Bayer. Zapewniają one dużą elastyczność pod względem jakości obrazu i wydajności przy słabym oświetleniu. Android 12 wprowadza nowe interfejsy API platform, które pozwalają aplikacjom innych firm w pełni wykorzystać te uniwersalne czujniki. Nowe interfejsy API obsługują wyjątkowe działanie tych czujników i uwzględniają, że mogą obsługiwać różne konfiguracje i kombinacje strumieni w trybie pełnej rozdzielczości lub w trybie „maksymalnej rozdzielczości” lub w trybie „domyślnym”.
Grafika i grafika
Zapewnij aplikacjom bezpośredni dostęp do śladów tombstone
Począwszy od Androida 12 możesz uzyskać dostęp do macierzystej awarii Twojej aplikacji jako 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ło użycie narzędzia Android Debug Bridge (adb).
Więcej informacji znajdziesz w artykule Zapewnianie aplikacjom bezpośredniego dostępu do zrzutów tombstone.
Obsługa obrazów AVIF
Android 12 obsługuje obrazy w formacie AV1 Image File Format (AVIF). AVIF to format kontenera dla obrazów i sekwencji obrazów zakodowanych za pomocą AV1. Format AVIF wykorzystuje treści kodowane w ramce pochodzące z kompresji wideo. Pozwala to znacznie poprawić jakość obrazu przy tym samym rozmiarze pliku w porównaniu z starszymi formatami obrazów, takimi jak JPEG. Omówienie zalet tego formatu znajdziesz w poście na blogu Jake'a Archibalda.
Łatwiejsze rozmycie, filtry kolorów i inne efekty
W Androidzie 12 dodaliśmy nową wersję RenderEffect
, która stosuje popularne efekty graficzne, takie jak rozmycie, filtry kolorów czy efekty cieniowania w Androidzie, do elementów View
i hierarchii renderowania. Efekty można łączyć albo jako efekty łańcuchowe (tworzące efekt wewnętrzny i zewnętrzny), albo efekty mieszane. Różne urządzenia z Androidem mogą nie obsługiwać tej funkcji ze względu na ograniczoną moc obliczeniową.
Efekty można również zastosować do bazowego elementu RenderNode
w elementach View
, wywołując metodę View.setRenderEffect(RenderEffect)
.
Aby zaimplementować RenderEffect
:
view.setRenderEffect(RenderEffect.createBlurEffect(radiusX, radiusY, SHADER_TILE_MODE))
Natywne dekodowanie animowanego obrazu
W Androidzie 12 rozszerzono interfejs API NDK ImageDecoder
, aby dekodować wszystkie klatki i dane o czasie z obrazów, które używają animowanych plików GIF i plików w formacie WebP. Po wprowadzeniu na Androida 11 interfejs API odkodował tylko pierwsze zdjęcie z animacji w tych formatach.
Aby jeszcze bardziej zmniejszyć rozmiar pliku APK i korzystać z przyszłych aktualizacji dotyczących bezpieczeństwa i wydajności, używaj ImageDecoder
zamiast bibliotek innych firm.
Więcej informacji o interfejsie API znajdziesz w dokumentacji API oraz w przykładzie na GitHubie.
Połączenia
Nie usypiaj aplikacji towarzyszących
Aby zaspokoić potrzebę zarządzania urządzeniem przez aplikacje towarzyszące, Android 12 wprowadza interfejsy API, które:
- Umożliwia wybudzanie aplikacji, gdy urządzenie towarzyszące będzie w zasięgu.
- Zapewnij, że proces będzie kontynuowany, gdy urządzenie będzie w zasięgu.
Aby można było korzystać z interfejsów API, urządzenia muszą być połączone za pomocą Menedżera urządzeń towarzyszących. Więcej informacji znajdziesz w sekcjach CompanionDeviceManager.startObservingDevicePresence()
i CompanionDeviceService.onDeviceAppeared()
.
Profile Menedżera urządzeń towarzyszących
Aplikacje partnerów na Androidzie 12 (poziom interfejsu API 31) i nowszym mogą korzystać z profili urządzenia towarzyszącego podczas łączenia się z zegarkiem. Korzystanie z profilu upraszcza proces rejestracji, łącząc w jednym kroku przyznawanie zestawu uprawnień określonego typu urządzenia.
Uprawnienia zawarte w pakiecie są przyznawane aplikacji towarzyszącej po nawiązaniu połączenia z urządzeniem i tylko w czasie, gdy urządzenie jest powiązane. Usunięcie aplikacji lub powiązania spowoduje usunięcie uprawnień.
Więcej informacji: AssociationRequest.Builder.setDeviceProfile()
.
Ulepszenia szacowania przepustowości
W Androidzie 12 funkcje szacowania przepustowości oferowane przez getLinkDownstreamBandwidthKbps()
i getLinkUpstreamBandwidthKbps()
zostały ulepszone zarówno w przypadku połączeń Wi-Fi, jak i komórkowych. Zwracane wartości reprezentują teraz średnią ważoną przez użytkownika w danym okresie średnią przepustowość na operatora lub sieci Wi-Fi, typ sieci i poziom sygnału we wszystkich aplikacjach na urządzeniu.
Pozwala to uzyskać dokładniejsze i bardziej realistyczne oszacowanie oczekiwanej przepustowości, podać oszacowania przy uruchamianiu aplikacji „na zimno” oraz wymagają mniejszej liczby cykli w porównaniu z innymi metodami szacowania przepustowości.
Ulepszenia Wi-Fi Aware (NAN)
Android 12 dodaje kilka ulepszeń do Wi-Fi Aware:
- Na urządzeniach z Androidem 12 (poziom interfejsu API 31) lub nowszym możesz używać wywołania zwrotnego
onServiceLost()
, aby otrzymywać alerty, gdy aplikacja utraci wykrytą usługę w związku z jej zatrzymaniem lub wykroczeniem poza jej zasięg. - Zmienia się sposób konfigurowania wielu ścieżek danych (ścieżki danych NAN). Wcześniejsze wersje wykorzystywały wiadomości L2 do wymiany informacji porównawczych o inicjatorach, co spowodowało opóźnienie. Na urządzeniach z Androidem 12 lub nowszym respondent (serwer) można skonfigurować tak, aby akceptował dowolny element równorzędny – nie musi więc z góry znać informacji o inicjucie. Przyspiesza to otwieranie ścieżki danych i umożliwia korzystanie z wielu połączeń punkt-punkt za pomocą jednego żądania sieciowego.
- Aby zapobiec odrzucaniu przez platformę żądań odkrywania lub połączenia z powodu wyczerpania zasobów, na urządzeniach z Androidem 12 lub nowszym możesz wywołać metodę
WifiAwareManager.getAvailableAwareResources()
. Wartość zwrócona przez tę metodę pozwala uzyskać liczbę dostępnych ścieżek danych, liczbę dostępnych sesji publikowania i liczbę dostępnych sesji subskrypcji.
Równoczesne połączenie peer-to-peer + połączenie z internetem
Gdy 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łączenia P2P nie spowoduje odłączenia istniejącego 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 w przypadku płatności NFC
W aplikacjach kierowanych na Androida 12 lub nowszego możesz włączyć płatności z użyciem NFC bez włączonego ekranu urządzenia. W tym celu ustaw requireDeviceScreenOn
na false
. Więcej informacji o płatnościach NFC przy wyłączonym lub zablokowanym ekranie znajdziesz w artykule Wyłączanie ekranu i działanie przy zablokowanym ekranie.
Miejsce na dane
Android 12 wprowadza te funkcje zarządzania miejscem na dane:
- Magazyn multimediów obsługuje
MediaDocumentsProvider
, gdy aplikacja pobiera identyfikator URI multimediów odpowiadający identyfikatorowi URI 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 potwierdzenia w przypadku każdej z tych operacji. - Aplikacje, które mają zarówno uprawnienie
MANAGE_EXTERNAL_STORAGE
, jak iQUERY_ALL_PACKAGES
– np. aplikacje do zarządzania plikami – mogą wywołać niestandardowe działanie do zarządzania miejscem na dane innej aplikacji, pod warunkiem że druga aplikacja utworzy aktywność niestandardową.
Główna funkcja
Automatyczne aktualizacje aplikacji
Android 12 wprowadza metodę setRequireUserAction()
w przypadku aplikacji, które korzystają z interfejsu API PackageInstaller
.
Dzięki tej metodzie instalatory mogą aktualizować aplikacje bez konieczności potwierdzenia działania przez użytkownika.
Informacje o chipsetu urządzenia
Android 12 dodaje do android.os.Build
2 stałe, które udostępniają informacje o dostawcy chipsetu SoC i modelu za pomocą pakietu SDK. Możesz pobrać te informacje, wywołując odpowiednio Build.SOC_MANUFACTURER
i Build.SOC_MODEL
.
Aktualizacje podstawowych interfejsów API Java
Na podstawie próśb i współpracy z programistami dodaliśmy w Androidzie 12 te podstawowe biblioteki:
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
|