Android 6.0 (M) oferuje nowe funkcje dla użytkowników i programistów. Ten dokument zawiera wprowadzenie do najważniejszych interfejsów API.
Zacznij programować
Aby zacząć tworzyć aplikacje na Androida 6.0, musisz najpierw pobrać pakiet Android SDK. Następnie za pomocą Menedżera pakietu SDK pobierz obrazy systemu i platformy pakietu SDK Androida 6.0.
Zaktualizuj docelowy poziom interfejsu API
Aby lepiej zoptymalizować aplikację na urządzenia z Androidem, ustaw targetSdkVersion
na "23"
, zainstaluj aplikację na obrazie systemu Android, przetestuj ją, a następnie opublikuj zaktualizowaną aplikację z tą zmianą.
Możesz używać interfejsów API Androida, jednocześnie obsługując starsze wersje, dodając do kodu warunki, które sprawdzają poziom interfejsu API systemu przed wykonaniem interfejsów API nieobsługiwanych przez minSdkVersion
.
Więcej informacji o zapewnianiu zgodności wstecznej znajdziesz w artykule Obsługa różnych wersji platform.
Więcej informacji o tym, jak działają poziomy interfejsu API, znajdziesz w artykule Co to jest poziom interfejsu API?
Uwierzytelnianie odciskiem palca
W tej wersji udostępniamy nowe interfejsy API, które umożliwiają uwierzytelnianie użytkowników za pomocą skanowania ich odcisku palca na obsługiwanych urządzeniach. Używaj tych interfejsów w połączeniu z systemem Android Keystore.
Aby uwierzytelniać użytkowników za pomocą skanu odcisku palca, pobierz instancję nowej klasy FingerprintManager
i wywołaj metodę authenticate()
. Aplikacja musi działać na zgodnym urządzeniu z czytnikiem linii papilarnych. W aplikacji musisz zaimplementować interfejs do procesu uwierzytelniania odciskiem palca i użyć standardowej ikony odcisku palca na Androidzie.
Ikona odcisku palca Androida (c_fp_40px.png
) jest dostępna w pliku z przykładem uwierzytelniania biometrycznego.
Jeśli tworzysz kilka aplikacji, które korzystają z uwierzytelniania odciskiem palca, pamiętaj, że każda z nich musi niezależnie uwierzytelniać odcisk palca użytkownika.
Aby korzystać z tej funkcji w aplikacji, najpierw dodaj uprawnienie
USE_FINGERPRINT
w pliku manifestu.
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
Aby zobaczyć implementację uwierzytelniania odciskiem palca w aplikacji, zapoznaj się z przykładem uwierzytelniania biometrycznego. Aby dowiedzieć się, jak używać tych interfejsów API do uwierzytelniania w połączeniu z innymi interfejsami API Androida, obejrzyj film Interfejsy API odcisków palców i płatności.
Jeśli testujesz tę funkcję, wykonaj te czynności:
- Zainstaluj pakiet Android SDK Tools w wersji 24.3, jeśli jeszcze jej nie masz.
- Zarejestruj nowy odcisk palca w emulatorze, klikając Ustawienia > Zabezpieczenia > Odcisk palca, a następnie postępuj zgodnie z instrukcjami rejestracji.
- Użyj emulatora, aby emulować zdarzenia dotyku odcisku palca za pomocą tego polecenia. Użyj tego samego polecenia, aby emulować zdarzenia dotknięcia odcisku palca na ekranie blokady lub w aplikacji.
adb -e emu finger touch <finger_id>
W systemie Windows konieczne może być uruchomienie polecenia
telnet 127.0.0.1 <emulator-id>
, a następniefinger touch <finger_id>
.
Potwierdź dane logowania
Aplikacja może uwierzytelniać użytkowników na podstawie tego, jak dawno temu odblokowali oni swoje urządzenie. Dzięki tej funkcji użytkownicy nie muszą zapamiętywać dodatkowych haseł do aplikacji i nie musisz wdrażać własnego interfejsu uwierzytelniania. Aplikacja powinna używać tej funkcji w połączeniu z implementacją klucza publicznego lub tajnego na potrzeby uwierzytelniania użytkownika.
Aby ustawić czas oczekiwania, w którym ten sam klucz może być ponownie użyty po uwierzytelnieniu użytkownika, wywołaj nową metodę setUserAuthenticationValidityDurationSeconds()
podczas konfigurowania funkcji KeyGenerator
lub KeyPairGenerator
.
Unikaj nadmiernego wyświetlania okna ponownej autoryzacji – aplikacje powinny najpierw próbować użyć obiektu kryptograficznego, a jeśli czas oczekiwania upłynie, użyć metody createConfirmDeviceCredentialIntent()
, aby ponownie uwierzytelnić użytkownika w aplikacji.
Łączenie aplikacji
Ta wersja ulepsza system intencji Androida, zapewniając bardziej wydajne łączenie aplikacji. Ta funkcja umożliwia powiązanie aplikacji z Twoją domeną internetową. Na podstawie tego powiązania platforma może określić domyślną aplikację używaną do obsługi konkretnego linku internetowego i pominąć prośby użytkowników o wybranie aplikacji. Więcej informacji o implementowaniu tej funkcji znajdziesz w artykule Obsługa linków aplikacji.
Automatyczna kopia zapasowa aplikacji
System automatycznie tworzy teraz pełną kopię zapasową danych aplikacji i przywraca ją. Aby umożliwić to działanie, Twoja aplikacja musi być kierowana na Androida 6.0 (poziom interfejsu API 23). Nie musisz dodawać żadnego dodatkowego kodu. Jeśli użytkownicy usuną swoje konta Google, zostaną też usunięte ich dane kopii zapasowej. Aby dowiedzieć się, jak działa ta funkcja i jak skonfigurować tworzenie kopii zapasowych w systemie plików, przeczytaj artykuł Konfigurowanie automatycznego tworzenia kopii zapasowych aplikacji.
Udostępnianie bezpośrednie
Ta wersja zawiera interfejsy API, które umożliwiają użytkownikom intuicyjne i szybkie udostępnianie treści. Możesz teraz definiować cele bezpośredniego udostępniania, które uruchamiają określone działanie w aplikacji. Te cele udostępniania są widoczne dla użytkowników w menu Udostępnij. Ta funkcja umożliwia użytkownikom udostępnianie treści odbiorcom, takim jak kontakty w innych aplikacjach. Na przykład może ono uruchamiać działanie w innej aplikacji sieci społecznościowej, które umożliwia użytkownikowi udostępnianie treści bezpośrednio konkretnemu znajomemu lub społeczności w tej aplikacji.
Aby włączyć docelowe udostępnianie bezpośrednie, musisz zdefiniować klasę rozszerzającą klasę ChooserTargetService
. Zadeklaruj usługę w pliku manifestu. W deklaracji podaj uprawnienie BIND_CHOOSER_TARGET_SERVICE
i filtr intencji za pomocą działania SERVICE_INTERFACE
.
Przykład poniżej pokazuje, jak zadeklarować element ChooserTargetService
w pliku manifestu.
<service android:name=".ChooserTargetService" android:label="@string/service_name" android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"> <intent-filter> <action android:name="android.service.chooser.ChooserTargetService" /> </intent-filter> </service>
W przypadku każdego działania, które chcesz udostępnić aplikacji ChooserTargetService
, dodaj element <meta-data>
o nazwie "android.service.chooser.chooser_target_service"
w pliku manifestu aplikacji.
<activity android:name=".MyShareActivity” android:label="@string/share_activity_label"> <intent-filter> <action android:name="android.intent.action.SEND" /> </intent-filter> <meta-data android:name="android.service.chooser.chooser_target_service" android:value=".ChooserTargetService" /> </activity>
Interakcje głosowe
Ta wersja zawiera nowy interfejs API interakcji głosowych, który wraz z czynnościami głosowymi umożliwia tworzenie w aplikacjach funkcji konwersacji głosowych. Aby sprawdzić, czy Twoje działanie zostało wywołane przez polecenie głosowe, wywołaj metodę isVoiceInteraction()
. Jeśli tak, aplikacja może używać klasy VoiceInteractor
, aby poprosić użytkownika o potwierdzenie głosowe, wybranie opcji z listy itp.
Większość interakcji głosowych pochodzi od użytkownika. Aktywność interakcji głosowej może jednak również rozpocząć się bez udziału użytkownika. Inna aplikacja uruchomiona za pomocą interakcji głosowej może też wysłać zamiar uruchomienia interakcji głosowej. Aby określić, czy aktywność została uruchomiona przez zapytanie głosowe użytkownika czy z innej aplikacji do interakcji głosowej, wywołaj metodę isVoiceInteractionRoot()
. Jeśli aktywność została uruchomiona przez inną aplikację, metoda zwraca false
. Aplikacja może poprosić użytkownika o potwierdzenie, że chce wykonać tę czynność.
Więcej informacji o wdrażaniu działań głosowych znajdziesz na stronie dla deweloperów poświęconej działaniom głosowym.
Interfejs Assist API
Ta wersja to nowy sposób, w jaki użytkownicy mogą korzystać z Twoich aplikacji z pomocą Asystenta. Aby korzystać z tej funkcji, użytkownik musi włączyć asystenta do korzystania z bieżącego kontekstu. Po włączeniu tej funkcji użytkownik może wywołać Asystenta w dowolnej aplikacji, naciskając i przytrzymując przycisk Ekran główny.
Aplikacja może nie udostępniać bieżącego kontekstu asystentowi, ustawiając flagę FLAG_SECURE
. Oprócz standardowego zestawu informacji, który platforma przekazuje do asystenta, aplikacja może udostępniać dodatkowe informacje, korzystając z nowej klasy AssistContent
.
Aby zapewnić mu dodatkowy kontekst z Twojej aplikacji, wykonaj te czynności:
- Wdróż interfejs
Application.OnProvideAssistDataListener
. - Zarejestruj ten detektor za pomocą
registerOnProvideAssistDataListener()
. - Aby podać informacje kontekstowe dotyczące konkretnej aktywności, zastąpij funkcję
onProvideAssistData()
callback i opcjonalnie funkcjęonProvideAssistContent()
callback.
uniwersalne urządzenia pamięci masowej
Dzięki tej wersji użytkownicy mogą adoptować urządzenia pamięci zewnętrznej, takie jak karty SD. Zastosowanie zewnętrznego urządzenia pamięci masowej szyfruje i formatuje urządzenie tak, aby działało jak pamięć wewnętrzna. Ta funkcja umożliwia użytkownikom przenoszenie aplikacji i prywatnych danych tych aplikacji między urządzeniami pamięci masowej. Podczas przenoszenia aplikacji system uwzględnia ustawienie android:installLocation
w pliku manifestu.
Jeśli Twoja aplikacja uzyskuje dostęp do tych interfejsów API lub pól, pamiętaj, że ścieżki plików zwracane przez nie będą się dynamicznie zmieniać, gdy aplikacja będzie przenoszona między wewnętrznymi i zewnętrzymi urządzeniami pamięci masowej. Zdecydowanie zalecamy, aby przy tworzeniu ścieżek plików zawsze wywoływać te interfejsy API dynamicznie. Nie używaj zakodowanych na stałe ścieżek do plików ani zachowuj w pełni kwalifikowanych ścieżek plików, które zostały utworzone wcześniej.
Context
metody:ApplicationInfo
pola:
Aby debugować tę funkcję, możesz włączyć obsługę dysku USB, który jest podłączony do urządzenia z Androidem za pomocą kabla USB On-The-Go (OTG), wykonując to polecenie:
$ adb shell sm set-force-adoptable true
Powiadomienia
W tej wersji wprowadzono następujące zmiany interfejsu API dotyczące powiadomień:
- Nowy poziom filtra
INTERRUPTION_FILTER_ALARMS
odpowiadający nowemu trybowi Nie przeszkadzać Tylko alarmy. - Nowa wartość kategorii
CATEGORY_REMINDER
, która służy do rozróżniania przypomnień zaplanowanych przez użytkownika od innych zdarzeń (CATEGORY_EVENT
) i alarmów (CATEGORY_ALARM
). - Nowa klasa
Icon
, którą możesz dołączać do powiadomień za pomocą metodsetSmallIcon()
isetLargeIcon()
. Podobnie metodaaddAction()
akceptuje teraz obiektIcon
zamiast identyfikatora zasobu rysowalnego. - Nowa metoda
getActiveNotifications()
, która umożliwia aplikacjom ustalenie, które z ich powiadomień są obecnie aktywne.
Obsługa rysika Bluetooth
Ta wersja zapewnia lepszą obsługę danych wejściowych użytkownika za pomocą piórka Bluetooth. Użytkownicy mogą sparować i podłączyć do telefonu lub tabletu zgodny rysik Bluetooth. Podczas połączenia informacje o pozycji z ekranu dotykowego są łączone z informacjami o ciśnieniu i przyciskach z pióra, aby zapewnić większy zakres możliwości niż w przypadku samego ekranu dotykowego. Aplikacja może wykrywać naciśnięcia przycisków rysika i wykonywać działania dodatkowe, rejestrując obiekty View.OnContextClickListener
i GestureDetector.OnContextClickListener
w Twojej aktywności.
Aby wykrywać interakcje z przyciskiem rysika, użyj metod i konstant MotionEvent
:
- Jeśli użytkownik dotknie rysika z przyciskiem na ekranie aplikacji, metoda
getTooltype()
zwróci wartośćTOOL_TYPE_STYLUS
. - W przypadku aplikacji kierowanych na Androida 6.0 (poziom interfejsu API 23) metoda
getButtonState()
zwraca wartośćBUTTON_STYLUS_PRIMARY
, gdy użytkownik naciśnie główny przycisk rysika. Jeśli rysik ma drugi przycisk, ta sama metoda zwracaBUTTON_STYLUS_SECONDARY
, gdy użytkownik go naciśnie. Jeśli użytkownik naciśnie oba przyciski jednocześnie, metoda zwróci obie wartości połączone OR (BUTTON_STYLUS_PRIMARY
|BUTTON_STYLUS_SECONDARY
). -
W przypadku aplikacji kierowanych na niższą wersję platformy metoda
getButtonState()
zwracaBUTTON_SECONDARY
(po naciśnięciu głównego przycisku rysika),BUTTON_TERTIARY
(naciśnięcie dodatkowego przycisku rysika) lub obie te wartości.
Ulepszone skanowanie Bluetooth Low Energy
Jeśli Twoja aplikacja wykonuje skanowanie Bluetooth Low Energy, użyj nowej metody setCallbackType()
, aby określić, że system ma powiadamiać funkcje zwrotne, gdy po raz pierwszy wykryje lub zobaczy po długim czasie pakiet reklamy zgodny z zestawem ScanFilter
. Takie podejście do skanowania jest bardziej energooszczędne niż w poprzedniej wersji platformy.
Obsługa Hotspot 2.0 w wersji 1
Ta wersja wprowadza obsługę specyfikacji Hotspot 2.0 Release 1 na urządzeniach Nexus 6 i Nexus 9. Aby w aplikacji udostępnić dane uwierzytelniające Hotspot 2.0, użyj nowych metod klasy WifiEnterpriseConfig
, takich jak setPlmn()
i setRealm()
. W obiekcie WifiConfiguration
możesz skonfigurować pola FQDN
i providerFriendlyName
.
Nowa metoda isPasspointNetwork()
wskazuje, czy wykryta sieć reprezentuje punkt dostępu Hotspot 2.0.
Tryb wyświetlania 4K
Platforma pozwala teraz aplikacjom na żądanie zwiększenia rozdzielczości ekranu do renderowania 4K na zgodnym sprzęcie. Aby wysłać zapytanie o bieżącą rozdzielczość fizyczną, użyj nowych interfejsów API Display.Mode
. Jeśli interfejs użytkownika jest rysowany w niższej rozdzielczości logicznej i przeskalowywany do większej rozdzielczości fizycznej, pamiętaj, że rozdzielczość fizyczna zwracana przez metodę getPhysicalWidth()
może się różnić od rozdzielczości logicznej podanej przez getSize()
.
Możesz poprosić system o zmianę fizycznej rozdzielczości w aplikacji podczas jej działania, ustawiając właściwość preferredDisplayModeId
okna aplikacji. Ta funkcja jest przydatna, jeśli chcesz przełączyć się na rozdzielczość 4K. W trybie wyświetlania 4K interfejs jest nadal renderowany w pierwotnej rozdzielczości (np. 1080p) i przeskalowywany do 4K, ale obiekty SurfaceView
mogą wyświetlać treści w natywnej rozdzielczości.
Motywy ColorStateLists
Atrybuty motywu są teraz obsługiwane w ColorStateList
na urządzeniach z Androidem 6.0 (poziom interfejsu API 23). Metody Resources.getColorStateList()
i Resources.getColor()
zostały wycofane. Jeśli wywołujesz te interfejsy API, wywołuj zamiast nich nowe metody Context.getColorStateList()
lub Context.getColor()
. Te metody są też dostępne w bibliotece appcompat w wersji 4 w ContextCompat
.
Funkcje audio
W tej wersji wprowadziliśmy ulepszenia w zakresie przetwarzania dźwięku na Androidzie, takie jak:
- Obsługa protokołu MIDI za pomocą nowych interfejsów API
android.media.midi
. Używaj tych interfejsów API do wysyłania i odbierania zdarzeń MIDI. - Nowe klasy
AudioRecord.Builder
iAudioTrack.Builder
do tworzenia obiektów cyfrowego przechwytywania i odtwarzania dźwięku oraz do konfigurowania właściwości źródła i odbiornika dźwięku, aby zastąpić domyślne wartości systemowe. - Elementy wywołujące interfejs API służące do kojarzenia urządzeń audio i wejściowych. Jest to szczególnie przydatne, jeśli Twoja aplikacja umożliwia użytkownikom uruchamianie wyszukiwania głosowego za pomocą kontrolera do gier lub pilota połączonego z Android TV. System wywołuje nowy wywołanie zwrotne
onSearchRequested()
, gdy użytkownik rozpoczyna wyszukiwanie. Aby określić, czy urządzenie wejściowe użytkownika ma wbudowany mikrofon, pobierz obiektInputDevice
z tego wywołania zwrotnego, a potem wywołaj nową metodęhasMicrophone()
. - Nowa metoda
getDevices()
, która umożliwia pobranie listy wszystkich urządzeń audio aktualnie połączonych z systemem. Możesz też zarejestrować obiektAudioDeviceCallback
, jeśli chcesz, by system powiadamiał aplikację o połączeniu lub rozłączeniu urządzenia audio.
Funkcje dotyczące filmów
Ta wersja dodaje do interfejsów API do przetwarzania filmów nowe funkcje, w tym:
- Nowa klasa
MediaSync
, która pomaga aplikacjom synchronicznie renderować strumienie audio i wideo. Bufory audio są przesyłane w trybie nieblokującym i zwracane za pomocą połączenia zwrotnego. Obsługuje też dynamiczną szybkość odtwarzania. - Nowe zdarzenie
EVENT_SESSION_RECLAIMED
, które wskazuje, że sesja otwarta przez aplikację została odzyskana przez menedżera zasobów. Jeśli Twoja aplikacja korzysta z sesji DRM, musisz obsłużyć to zdarzenie i upewnić się, że nie używasz sesji odzyskanej. - Nowy kod błędu
ERROR_RECLAIMED
, który wskazuje, że menedżer zasobów odzyskał zasób multimediów używany przez kodek. Z tym wyjątkiem kodek musi być zwolniony, ponieważ został przeniesiony do stanu terminala. - Nowy interfejs
getMaxSupportedInstances()
otrzymujący wskazówkę dotyczącą maksymalnej liczby obsługiwanych instancji kodeka jednocześnie. - Nowa metoda
setPlaybackParams()
umożliwiająca ustawienie szybkości odtwarzania multimediów w celu przyspieszenia lub zwolnienia odtwarzania. Automatycznie wydłuża lub przyspiesza odtwarzanie dźwięku w zależności od filmu.
Funkcje aparatu
Ta wersja zawiera te nowe interfejsy API umożliwiające dostęp do lampy błyskowej aparatu i przetwarzanie zdjęć przez aparat:
Interfejs Flashlight API
Jeśli urządzenie z kamerą ma lampę błyskową, możesz użyć metody setTorchMode()
, aby włączyć lub wyłączyć tryb latarki lampy bez otwierania urządzenia. Aplikacja nie ma wyłącznego prawa własności do modułu lampy błyskowej ani urządzenia z kamerą. Tryb latarki jest wyłączany i staje się niedostępny, gdy urządzenie z kamerą jest niedostępne lub gdy inne zasoby kamery, które utrzymują latarkę, stają się niedostępne. Inne aplikacje mogą też wywoływać setTorchMode()
w celu wyłączenia trybu latarki. Gdy zamkniesz ostatnią aplikację, która włączyła tryb latarki, tryb latarki zostanie wyłączony.
Aby zarejestrować wywołanie zwrotne, które będzie informować o stanie trybu latarki, wywołaj metodę registerTorchCallback()
. Przy pierwszej rejestracji wywołania zwrotnego jest ono natychmiast wywoływane ze stanem trybu latarki wszystkich obecnie znanych aparatów z lampą błyskową. Po włączeniu lub wyłączeniu trybu latarki wywoływana jest metoda onTorchModeChanged()
.
Interfejs API do ponownego przetwarzania
Interfejs API Camera2
został rozszerzony o obsługę przetwarzania obrazu w formacie YUV i prywatnym niewidocznym. Aby sprawdzić, czy te funkcje są dostępne, zadzwoń pod numer getCameraCharacteristics()
i sprawdź, czy masz klucz REPROCESS_MAX_CAPTURE_STALL
. Jeśli urządzenie obsługuje przetwarzanie wsteczne, możesz utworzyć sesję przechwytywania z możliwością przetworzenia wstecznego, wywołując funkcję createReprocessableCaptureSession()
, i utworzyć żądania przetworzenia wstecznego bufora wejściowego.
Za pomocą klasy ImageWriter
podłącz przepływ bufora wejściowego do danych wejściowych kamery podczas ponownego przetwarzania danych. Aby uzyskać pusty bufor, zastosuj ten model programowania:
- Wywołaj metodę
dequeueInputImage()
. - Umieścić dane w buforze wejściowym.
- Wyślij bufor do kamery, wywołując metodę
queueInputImage()
.
Jeśli używasz obiektu ImageWriter
razem z obrazem PRIVATE
, aplikacja nie może uzyskać bezpośredniego dostępu do danych obrazu. Zamiast tego prześlij obraz PRIVATE
bezpośrednio do funkcji ImageWriter
, wywołując metodę queueInputImage()
bez kopiowania do bufora.
Klasa ImageReader
obsługuje teraz strumienie obrazów w formacie PRIVATE
. Ta funkcja pozwala aplikacji utrzymać okrągłą kolejkę obrazów wyjściowych z ImageReader
, wybierać obrazy i wysyłać je do ImageWriter
w celu ponownego przetworzenia przez aparat.
Funkcje Androida dla firm
Ta wersja zawiera te nowe interfejsy API dla Androida dla firm:
- Rozszerzone opcje zarządzania urządzeniami jednorazowego użytku należącymi do firmy: właściciel urządzenia może teraz kontrolować te ustawienia, aby ułatwić zarządzanie urządzeniami jednorazowego użytku należącymi do firmy:
- Wyłącz lub ponownie włącz blokadę klawiszy, używając metody
setKeyguardDisabled()
. - Wyłącz lub włącz ponownie pasek stanu (w tym Szybkie ustawienia, powiadomienia i gesty nawigacyjne, które uruchamiają Google Now) za pomocą metody
setStatusBarDisabled()
. - Wyłącz lub ponownie włącz bezpieczny rozruch ze stałą
UserManager
DISALLOW_SAFE_BOOT
. - Zapobiegaj wyłączaniu ekranu podczas ładowania za pomocą stałej wartości
STAY_ON_WHILE_PLUGGED_IN
.
- Wyłącz lub ponownie włącz blokadę klawiszy, używając metody
- Ciche instalowanie i odinstalowywanie aplikacji przez właściciela urządzenia: właściciel urządzenia może teraz cicho instalować i odinstalowywać aplikacje za pomocą interfejsów API
PackageInstaller
, niezależnie od Google Play for Work. Możesz teraz udostępniać urządzenia za pomocą właściciela urządzenia, który pobiera i instaluje aplikacje bez udziału użytkownika. Ta funkcja jest przydatna, gdy chcesz włączyć obsługę kiosku lub innych urządzeń jednym kliknięciem bez aktywowania konta Google. - Cichy dostęp do certyfikatów przedsiębiorstwa: gdy aplikacja wywoła
choosePrivateKeyAlias()
, zanim użytkownik zostanie poproszony o wybranie certyfikatu, profil lub właściciel urządzenia mogą teraz wywołać metodęonChoosePrivateKeyAlias()
, aby dyskretnie udostępnić alias aplikacji, która wysłała żądanie. Ta funkcja umożliwia przyznawanie zarządzanym aplikacjom dostępu do certyfikatów bez interakcji z użytkownikiem. - Automatyczne akceptowanie aktualizacji systemu. Dzięki ustawieniu zasad aktualizacji systemu za pomocą funkcji
setSystemUpdatePolicy()
właściciel urządzenia może teraz automatycznie akceptować aktualizacje systemu, na przykład w przypadku urządzenia kioskowego, lub opóźnić aktualizację i uniemożliwić jej przeprowadzenie przez użytkownika przez okres do 30 dni. Administrator może też ustawić dzienny przedział czasu, w którym musi nastąpić aktualizacja, na przykład w godzinach, gdy kiosk nie jest używany. Gdy dostępna jest aktualizacja systemu, system sprawdza, czy aplikacja kontrolera zasad urządzeń ustawiła zasady aktualizacji systemu, i odpowiednio działa. -
Przedstawione instalowanie certyfikatów: właściciel profilu lub urządzenia może teraz przyznać aplikacji innej firmy możliwość wywoływania tych interfejsów API do zarządzania certyfikatami:
DevicePolicyManager
: - Śledzenie użycia danych. Właściciel profilu lub urządzenia może teraz za pomocą nowych metod
NetworkStatsManager
wysyłać zapytania o statystyki dotyczące wykorzystania danych widoczne w sekcji Ustawienia > Dane. Właścicielom profilu automatycznie przyznawane są uprawnienia do wysyłania zapytań o dane w profilu, którym zarządzają, a właścicielom urządzeń – dostęp do danych o użytkowaniu zarządzanego głównego konta użytkownika. - Zarządzanie uprawnieniami czasu działania:
Właściciel profilu lub urządzenia może ustawić zasady dotyczące uprawnień dla wszystkich żądań w czasie działania wszystkich aplikacji korzystających z
setPermissionPolicy()
, aby poprosić użytkownika o przyznanie uprawnień lub automatycznie przyznać lub odmówić przyznania uprawnień. Jeśli ta zasada jest skonfigurowana, użytkownik nie może zmienić wyboru dokonanego przez właściciela profilu lub urządzenia na ekranie uprawnień aplikacji w Ustawieniach. - VPN w Ustawieniach: aplikacje VPN są teraz widoczne w sekcji Ustawienia > Więcej > VPN. Dodatkowo powiadomienia dotyczące korzystania z sieci VPN są teraz dostosowane do sposobu jej konfiguracji. W przypadku właściciela profilu powiadomienia są wysyłane w zależności od tego, czy sieć VPN jest skonfigurowana na profilu zarządzanym, profilu osobistym czy na obu. W przypadku właściciela urządzenia powiadomienia zależą od tego, czy sieć VPN jest skonfigurowana dla całego urządzenia.
- Powiadomienie o stanie służbowym: ikona aktówki na pasku stanu pojawia się teraz, gdy aplikacja z profilu zarządzanego ma aktywność na pierwszym planie. Poza tym, jeśli urządzenie jest bezpośrednio odblokowane do aktywności w aplikacji w profilu zarządzanym, wyświetla się komunikat informujący użytkownika, że znajduje się on w profilu służbowym.