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 porównawczym interfejsów 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.
Interfejs użytkownika
Material You
Android 12 wprowadza nowy język projektowania oparty na Material You, który ułatwia tworzenie bardziej spersonalizowanych i pięknych aplikacji. Aby zainstalować wszystkie najnowsze aktualizacje Material Design 3 w swoich aplikacjach, 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 odświeżyć go z nowymi funkcjami.
Więcej informacji znajdziesz w artykule Ulepszenia widżetów w Androidzie 12.
Wstawianie szczegółowych treści
Android 12 wprowadza nowy, ujednolicony interfejs API, który umożliwia aplikacji otrzymywanie 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, która obejmuje ruch w kierunku aplikacji od momentu jej uruchomienia, 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ą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 doznania haptyczne
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. Deweloperom zalecamy używanie konstant i elementów podstawowych jako elementów składowych bogatych efektów haptycznych – pierwsze służą do wzbogacania zdarzeń interfejsu użytkownika, a kompozytor haptyczny do sekwencyjności elementów podstawowych w celu tworzenia bardziej złożonych efektów. Interfejsy API są dostępne do wypróbowania na urządzeniach Pixel 4. Wciąż współpracujemy z partnerami będącymi producentami urządzeń, aby zapewnić użytkownikom najnowsze funkcje haptyczne w całym ekosystemie.
Efekty haptyczne połączone z dźwiękiem
Aplikacje na Androidzie 12 mogą generować sygnały haptyczne pochodzące z sesji audio za pomocą wibratora telefonu. Dzięki temu możesz zapewnić użytkownikom bardziej wciągające wrażenia z gier i dźwięku. 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 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 występuje w 2 wersjach: indeksu lokalnego, który aplikacja może używać i który jest zgodny ze starszymi wersjami Androida, oraz indeksu centralnego, który jest utrzymywany 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. Dodatkowo aplikacja może bezpiecznie udostępniać dane innym aplikacjom, aby mogły one również wyszukiwać 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ą optymalizować rozgrywkę przez nadawanie 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 obrazu w obrazie:
Obsługa nowych gestów PiP
Android 12 obsługuje teraz gesty ukrywania i powiększania w oknie PiP:
Aby umieścić okno w skrypcie, użytkownik może je przeciągnąć w lewo lub w prawo. Aby odsłonić okno, użytkownik może kliknąć widoczną część ukrytego okna lub wyciągnąć je.
Użytkownik może teraz zmienić rozmiar okna PiP za pomocą funkcji powiększania.
Polecane nowe funkcje, które wspierają dopracowaną zmianę obrazu w obrazie
W Androidzie 12 dodano znaczne poprawki 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.
Dotyczy to tych funkcji:
-
Użyj flagi
setAutoEnterEnabled
, aby zapewnić płynniejsze przejścia do trybu obrazu w obrębie obrazu podczas przesuwania palcem w górę w trybie nawigacji za pomocą gestów. Wcześniej Android czekał na zakończenie animacji przesuwania do domu, a następnie zanikanie w oknie PIP. Płynniejsze animacje podczas włączania i wyłączania trybu obrazu w obrazie
Flaga
SourceRectHint
jest teraz używana ponownie, aby wprowadzić płynniejszą animację podczas wchodzenia do trybu PiP i z niego wychodzenia.Nowa flaga interfejsu API wyłączająca płynną zmianę rozmiaru w przypadku treści innych niż filmy
Flaga
SeamlessResizeEnabled
zapewnia płynniejszą animację przejścia podczas zmiany rozmiaru treści niebędących filmem w oknie PiP. Wcześniej zmiana rozmiaru treści innych niż wideo w oknie PIP mogła powodować zjawiska wizualne.
nowe powiadomienia o połączeniach telefonicznych, które umożliwiają ustalanie ważności poszczególnych połączeń;
Android 12 wprowadza nowy styl powiadomieńNotification.CallStyle
dotyczących 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.
Powiadomienia o przychodzących i trwających połączeniach są dla użytkowników najważniejsze, dlatego mają najwyższy priorytet w pasku. Dzięki temu system może przekierowywać 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 powiadomień z użyciem obrazów wzbogaconych
W Androidzie 12 możesz teraz wzbogacić powiadomienia w aplikacji, wyświetlają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 pełnoekranowego w przypadku nawigacji za pomocą gestów
Android 12 konsoliduje dotychczasowe zachowanie, aby ułatwić użytkownikom wykonywanie poleceń nawigacji za pomocą gestów w trybie pełnoekranowym. Ponadto Android 12 zapewnia zachowanie zgodności wstecznej w przypadku trybu przylegającego i trybu pełnoekranowego.
Udostępnianie adresów URL ostatnio używanych aplikacji (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 artykule Włączanie udostępniania adresów URL z obszaru Ostatnie.
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 mogą uzyskać dostęp do osobnych ekranów, na których widać, kiedy aplikacje uzyskują dostęp do informacji o lokalizacji, aparatu i mikrofonu. Każdy ekran zawiera osi czasu z informacjami o tym, kiedy różne aplikacje uzyskiwały dostęp do określonego typu danych. Ilustracja 1 przedstawia oś czasu dostępu do danych 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 przeznaczonym na Androida 12 interakcję z urządzeniami Bluetooth, zwłaszcza w przypadku aplikacji, które nie wymagają dostępu do lokalizacji urządzenia.
Zaktualizuj deklaracje uprawnień aplikacji na Bluetooth
Aby przygotować urządzenie do kierowania na Androida 12 lub nowszego, zaktualizuj logikę aplikacji. Zamiast deklarowania starszego zestawu uprawnień Bluetooth, zadeklaruj nowocześniejszy zestaw uprawnień Bluetooth.
Wyszukiwanie grup uprawnień
Na Androidzie 12 lub nowszym możesz sprawdzić, jak system porządkuje uprawnienia udostępniane przez platformę 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 umieścił w konkretnej grupie uprawnień, wywołaj funkcję
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ć funkcję setHideOverlayWindows()
, aby wskazać, że wszystkie okna typu TYPE_APPLICATION_OVERLAY
powinny być ukryte, gdy widoczne jest okno aplikacji. Aplikacje mogą korzystać z tej opcji w przypadku wyświetlania poufnych ekranów, np. procesu potwierdzania transakcji.
Aplikacje, które wyświetlają okna typu TYPE_APPLICATION_OVERLAY
, powinny rozważyć alternatywne rozwiązania, które mogą być bardziej odpowiednie do ich przypadku użycia, takie jak obraz w obrazie lub bąbelki.
Flaga ochrony uprawnień znanych podpisujących
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 przyznawanie uprawnień do podpisu innym aplikacjom bez konieczności podpisywania aplikacji w momencie ich produkcji i wysyłki.
Weryfikacja właściwości urządzenia
Android 12 rozszerza zestaw aplikacji, które mogą weryfikować właściwości urządzenia zawarte w certyfikacie atestacyjnym, gdy generują nowy klucz.
Od Androida 9 (poziom interfejsu API 28) właściciele zasad dotyczących urządzeń, którzy używają Keymastera 4.0 lub nowszej wersji, mogą weryfikować właściwości urządzenia w tych certyfikatach. 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 obejmują 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.
Lokalizowalne ciągi znaków dla BiometricPrompt
Android 12 wprowadza nowe interfejsy API, które ułatwiają poprawę wrażeń użytkowników aplikacji w zakresie uwierzytelniania biometrycznego. Nowa klasa zagnieżżona BiometricManager.Strings
zawiera metody getButtonLabel()
, getPromptMessage()
i getSettingName()
, które umożliwiają aplikacji pobranie czytelnej dla użytkownika, zlokalizowanej etykiety przycisku, komunikatu prompt lub nazwy 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 komunikatorach (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. Gdy wykryje takie treści, wyświetla nakładkę bezpieczeństwa na interfejsie aplikacji do przesyłania wiadomości, aby ostrzec użytkowników. Na przykład wykrywanie prób wyłudzenia danych może ostrzegać użytkowników o tych potencjalnych zagrożeniach:
- Podejrzane prośby, na przykład o wysłanie kodu, pieniędzy itp.
- Niezaufane adresy URL
- złośliwe załączniki,
- linki do złośliwych aplikacji;
Oprócz ostrzeżenia użytkownik może też zgłosić podejrzaną wiadomość i przekazać opinię na temat ostrzeżeń wydanych przez system.
Deweloperzy mogą zrezygnować z tej funkcji, dodając nowy tag metadanych zawierający ciąg znaków 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
Zgodne transkodowanie 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.
Aby dowiedzieć się więcej, zapoznaj się z artykułem 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ę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 zapewniać ulepszone wrażenia, które w pełni wykorzystują możliwości urządzenia.
Więcej informacji znajdziesz w artykule Klasa wydajności.
Ulepszenia kodowania filmów
Android 12 definiuje standardowy zestaw kluczy do kontrolowania wartości parametru kwantyzacji (QP) w przypadku kodowania wideo, co pozwala deweloperom uniknąć kodu specyficznego dla danego dostawcy.
Nowe klucze są dostępne w interfejsie API MediaFormat
, a także w bibliotece multimediów NDK.
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
Od Androida 12 (poziom API 31) w przypadku, gdy aplikacja poprosi o skupienie się na dźwięku, gdy inna aplikacja ma skupienie i odtwarza dźwięk, system powoduje zniknięcie aplikacji odtwarzającej.
Więcej informacji znajdziesz w artykule Tryb dźwiękowy w Androidzie 12 i wyższych.
Aktualizacje MediaDrm
Aby określić, czy w przypadku obecnych interfejsów API MediaDrm
wymagany jest bezpieczny dekoder, 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 dostawców Camera2
Wielu z naszych producentów urządzeń stworzyło niestandardowe rozszerzenia do aparatu – takie jak Bokeh, HDR czy Tryb nocny – aby aplikacje mogły z nich korzystać na swoich urządzeniach osobno. 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 znajdziesz w sekcji CameraExtensionCharacteristics
.
Obsługa czujnika Quad Bayer
Obecnie wiele urządzeń z Androidem jest wyposażonych w czujniki aparatu o bardzo wysokiej rozdzielczości, zazwyczaj z wzorcem Quad lub Nona Bayera, które zapewniają dużą elastyczność w zakresie jakości obrazu i działania 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
Dawanie aplikacjom bezpośredniego dostępu do śladów usunięcia
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 serializowany 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 pliku obrazu AV1 (AVIF). AVIF to format kontenera dla obrazów i sekwencji obrazów zakodowanych za pomocą AV1. AVIF wykorzystuje kodowanie intraramkowe 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
Android 12 wprowadza nowy format RenderEffect
, który umożliwia stosowanie typowych efektów graficznych, takich jak rozmycie, filtry kolorów czy efekty shadera Androida, do 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ą obsługiwać tę funkcję, ale mogą też nie obsługiwać z powodu ograniczonej mocy obliczeniowej.
Efekty można też stosować do RenderNode
View
, wywołując funkcję 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.
Zamiast bibliotek innych firm używaj biblioteki ImageDecoder
, aby zmniejszyć rozmiar pliku APK i korzystać z przyszłych aktualizacji dotyczących bezpieczeństwa i wydajności.
Więcej informacji o tym interfejsie API znajdziesz w dokumentacji API i przykładach na GitHubie.
Łączność
Utrzymywanie aplikacji towarzyszących w stanie czuwania
Aby umożliwić aplikacjom towarzyszącym działanie w tle, Android 12 wprowadza interfejsy API, które:
- Umożliwia wybudzanie aplikacji, gdy urządzenie towarzyszące będzie w zasięgu.
- Gwarantowanie, że proces będzie kontynuowany, dopóki urządzenie będzie w zasięgu.
Aby korzystać z interfejsów API, musisz połączyć urządzenia za pomocą Menedżera urządzeń towarzyszących. Więcej informacji znajdziesz w sekcji CompanionDeviceManager.startObservingDevicePresence()
i CompanionDeviceService.onDeviceAppeared()
.
Profile Menedżera urządzeń towarzyszących
Aplikacje partnerskie na Androidzie 12 (poziom interfejsu API 31) lub nowszym mogą korzystać z profili urządzeń towarzyszących podczas łączenia z zegarkiem. Korzystanie z profilu upraszcza proces rejestracji, łącząc w jednym kroku przyznawanie zestawu uprawnień określonego typu urządzenia.
Połączone uprawnienia są przyznawane aplikacji towarzyszącej po połączeniu urządzenia i trwają tylko przez czas jego powiązania. 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 udostępniane przez getLinkDownstreamBandwidthKbps()
i getLinkUpstreamBandwidthKbps()
zostały ulepszone zarówno w przypadku Wi-Fi, jak i łączności komórkowej. Wartości zwracane teraz reprezentują średnią ważoną przepustowość użytkownika na podstawie SSID operatora lub sieci Wi-Fi, typu sieci i poziomu 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 wprowadza kilka ulepszeń funkcji 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ć powiadomienia, gdy aplikacja utraci wykrytą usługę z powodu jej zatrzymania lub wyjścia poza zasięg. - Sposób konfigurowania wielu ścieżek danych (ścieżek danych NAN) staje się bardziej efektywny. Wcześniejsze wersje używały przesyłania L2 do wymiany informacji o inicjatorach, co powodowało opóźnienia. Na urządzeniach z Androidem 12 lub nowszym można skonfigurować serwer (odpowiadający) tak, aby akceptował dowolnego peera, czyli nie musiał znać informacji o inicjatorze z wyprzedzeniem. 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 framework próśb o wyszukiwanie lub połączenie z powodu braku zasobów, na urządzeniach z Androidem 12 lub nowszym możesz wywołać funkcję
WifiAwareManager.getAvailableAwareResources()
. Wartość zwracana przez tę metodę umożliwia uzyskanie liczby dostępnych ścieżek danych, liczby dostępnych sesji publikowania i liczby dostępnych sesji subskrypcji.
Równoczesne połączenie peer-to-peer i internetowe
Gdy urządzenia kierowane na Androida 12 (poziom interfejsu API 31) i nowsze działają na urządzeniach z obsługą sprzętową, korzystanie z połączeń typu peer-to-peer nie powoduje rozłączenia istniejącego połączenia Wi-Fi podczas tworzenia połączenia z urządzeniem peer. Aby sprawdzić, czy ta funkcja jest obsługiwana, użyj WifiManager.isMultiStaConcurrencySupported()
.
Włączanie płatności NFC przy wyłączonym ekranie
W aplikacjach przeznaczonych na urządzenia z Androidem 12 lub nowszym możesz włączyć płatności NFC bez włączonego ekranu urządzenia, ustawiając wartość requireDeviceScreenOn
na false
. Więcej informacji o płatnościach NFC przy wyłączonym lub zablokowanym ekranie znajdziesz w artykule Otwieranie ekranu i zablokowywanie ekranu.
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 nagrania głosowe.
- Uprawnienie
MANAGE_MEDIA
, które pozwala aplikacji wykonywać operacje zarządzania mediami bez wyświetlania użytkownikowi okna potwierdzenia dla każdej operacji. - Aplikacje, które mają zarówno uprawnienia
MANAGE_EXTERNAL_STORAGE
, jak iQUERY_ALL_PACKAGES
, na przykład aplikacje do zarządzania plikami, mogą wywoływać niestandardową aktywność w celu zarządzania miejscem na dane innej aplikacji, pod warunkiem że ta inna aplikacja utworzy tę niestandardową aktywność.
Główna funkcja
Automatyczne aktualizacje aplikacji
Android 12 wprowadza metodę setRequireUserAction()
dla aplikacji, które korzystają z interfejsu API PackageInstaller
.
Ta metoda umożliwia aplikacjom instalującym aktualizowanie aplikacji bez konieczności potwierdzenia przez użytkownika.
Informacje o chipsetach 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. Te informacje możesz uzyskać, dzwoniąc pod numery Build.SOC_MANUFACTURER
i Build.SOC_MODEL
.
Aktualizacje podstawowych interfejsów API Java
Na podstawie żądań i współpracy z deweloperami 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
|