Interfejsy API Androida 6.0

Android 6.0 (M) oferuje nowe funkcje dla użytkowników i programistów aplikacji. W tym dokumencie znajdziesz 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 użyj Menedżera SDK, aby pobrać platformę SDK Androida 6.0 i obrazy systemu.

Aktualizowanie docelowego poziomu 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, a jednocześnie obsługiwać 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 zachowaniu zgodności wstecznej znajdziesz w artykule Obsługa różnych wersji platformy.

Więcej informacji o poziomach interfejsu API znajdziesz w artykule Co to jest poziom interfejsu API?

Uwierzytelnianie odciskiem palca

Ta wersja zawiera nowe interfejsy API, które umożliwiają uwierzytelnianie użytkowników za pomocą skanów odcisków palców na obsługiwanych urządzeniach. Używaj tych interfejsów API w połączeniu z systemem Android Keystore.

Aby uwierzytelnić użytkowników za pomocą skanu odcisku palca, uzyskaj instancję nowej klasy FingerprintManager i wywołaj metodę authenticate(). Aplikacja musi być uruchomiona na zgodnym urządzeniu z czytnikiem linii papilarnych. W aplikacji musisz zaimplementować interfejs użytkownika do obsługi procesu uwierzytelniania odciskiem palca i używać w nim standardowej ikony odcisku palca na Androidzie. Ikona odcisku palca na Androidzie (c_fp_40px.png) jest dostępna w przykładowym kodzie 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 używać tej funkcji w aplikacji, najpierw dodaj uprawnienie USE_FINGERPRINT do pliku manifestu.

<uses-permission
        android:name="android.permission.USE_FINGERPRINT" />
Telefon z funkcją uwierzytelniania odciskiem palca

Aby zobaczyć implementację uwierzytelniania odciskiem palca w aplikacji, zapoznaj się z przykładową aplikacją do uwierzytelniania biometrycznego. Aby zobaczyć, jak używać tych interfejsów API 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:

  1. Zainstaluj Android SDK Tools w wersji 24.3, jeśli nie masz ich jeszcze zainstalowanych.
  2. Zarejestruj nowy odcisk palca w emulatorze, klikając Ustawienia > Zabezpieczenia > Odcisk palca, a potem postępuj zgodnie z instrukcjami rejestracji.
  3. Użyj emulatora, aby emulować zdarzenia dotknięcia odcisku palca za pomocą tego polecenia. Użyj tego samego polecenia, aby emulować zdarzenia dotknięcia odciskiem palca na ekranie blokady lub w aplikacji.
    adb -e emu finger touch <finger_id>
    

    W systemie Windows może być konieczne uruchomienie polecenia telnet 127.0.0.1 <emulator-id>, a następnie finger touch <finger_id>.

Potwierdź dane logowania

Aplikacja może uwierzytelniać użytkowników na podstawie tego, jak niedawno odblokowali urządzenie. Ta funkcja zwalnia użytkowników z konieczności zapamiętywania dodatkowych haseł do aplikacji i eliminuje potrzebę implementowania własnego interfejsu uwierzytelniania. Aplikacja powinna używać tej funkcji w połączeniu z implementacją klucza publicznego lub tajnego do uwierzytelniania użytkowników.

Aby ustawić czas oczekiwania, po którym ten sam klucz może być ponownie użyty po pomyślnym uwierzytelnieniu użytkownika, podczas konfigurowania KeyGenerator lub KeyPairGenerator wywołaj nową metodę setUserAuthenticationValidityDurationSeconds().

Unikaj nadmiernego wyświetlania okna ponownego uwierzytelniania – aplikacje powinny najpierw spróbować użyć obiektu kryptograficznego, a jeśli upłynie limit czasu, użyć metody createConfirmDeviceCredentialIntent() do ponownego uwierzytelnienia użytkownika w aplikacji.

Łączenie aplikacji

Ta wersja ulepsza system intencji Androida, zapewniając bardziej zaawansowane łączenie aplikacji. Ta funkcja umożliwia powiązanie aplikacji z należącą do Ciebie domeną internetową. Na podstawie tego powiązania platforma może określić domyślną aplikację do obsługi konkretnego linku internetowego i pominąć wyświetlanie użytkownikom prośby o wybranie aplikacji. Aby dowiedzieć się, jak wdrożyć tę funkcję, przeczytaj artykuł Obsługa linków do aplikacji.

Automatyczna kopia zapasowa aplikacji

System wykonuje teraz automatyczne tworzenie pełnych kopii zapasowych danych aplikacji i ich przywracanie. Aby włączyć to działanie, 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, dane z kopii zapasowych również zostaną usunięte. Aby dowiedzieć się, jak działa ta funkcja i jak skonfigurować, co ma być objęte kopią zapasową w systemie plików, przeczytaj artykuł Konfigurowanie automatycznej kopii zapasowej aplikacji.

Udostępnianie bezpośrednie

Dolna część telefonu komórkowego z funkcją udostępniania bezpośredniego

Ta wersja zawiera interfejsy API, które sprawiają, że udostępnianie jest intuicyjne i szybkie. Możesz teraz określać bezpośrednie cele udostępniania, które uruchamiają konkretne działanie w aplikacji. Te bezpośrednie cele udostępniania są widoczne dla użytkowników w menu Udostępnij. Ta funkcja umożliwia użytkownikom udostępnianie treści w innych aplikacjach, np. kontaktom. Na przykład bezpośredni cel udostępniania może uruchomić aktywność w innej aplikacji społecznościowej, która umożliwia użytkownikowi udostępnianie treści bezpośrednio konkretnemu znajomemu lub społeczności w tej aplikacji.

Aby włączyć bezpośrednie udostępnianie, musisz zdefiniować klasę, która rozszerza klasę ChooserTargetService. Zadeklaruj usługę w pliku manifestu. W deklaracji określ uprawnienie BIND_CHOOSER_TARGET_SERVICE i filtr intencji za pomocą działania SERVICE_INTERFACE.

Poniższy przykład pokazuje, jak możesz 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>

Dla każdej aktywności, którą chcesz udostępnić w 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 Voice Interaction API, który w połączeniu z działaniami głosowymi umożliwia tworzenie w aplikacjach funkcji głosowych opartych na konwersacji. Wywołaj metodę isVoiceInteraction(), aby sprawdzić, czy działanie głosowe wywołało Twoją aktywność. W takim przypadku aplikacja może używać klasy VoiceInteractor, aby poprosić użytkownika o potwierdzenie głosowe, wybrać opcję z listy i wykonać inne działania.

Większość interakcji głosowych pochodzi od działania głosowego użytkownika. Aktywność interakcji głosowej może się jednak rozpocząć bez danych wejściowych użytkownika. Na przykład inna aplikacja uruchomiona za pomocą interakcji głosowej może również wysłać intencję uruchomienia interakcji głosowej. Aby określić, czy aktywność została uruchomiona w wyniku zapytania głosowego użytkownika, czy w wyniku interakcji z inną aplikacją głosową, wywołaj metodę isVoiceInteractionRoot(). Jeśli Twoja aktywność została uruchomiona przez inną aplikację, metoda zwraca wartość false. Aplikacja może wtedy poprosić użytkownika o potwierdzenie, że chciał wykonać to działanie.

Więcej informacji o wdrażaniu działań głosowych znajdziesz na stronie dla deweloperów działań głosowych.

Assist API

Ta wersja udostępnia użytkownikom nowy sposób korzystania z aplikacji za pomocą asystenta. Aby korzystać z tej funkcji, użytkownik musi zezwolić asystentowi na używanie bieżącego kontekstu. Po włączeniu 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ć asystentowi bieżącego kontekstu, ustawiając flagę FLAG_SECURE. Oprócz standardowego zestawu informacji, które platforma przekazuje asystentowi, aplikacja może udostępniać dodatkowe informacje za pomocą nowej klasy AssistContent.

Aby przekazać asystentowi dodatkowe informacje kontekstowe z aplikacji:

  1. Zaimplementuj interfejs Application.OnProvideAssistDataListener.
  2. Zarejestruj tego odbiorcę za pomocą funkcji registerOnProvideAssistDataListener().
  3. Aby podać informacje kontekstowe dotyczące konkretnej aktywności, zastąp wywołanie zwrotne onProvideAssistData() i opcjonalnie nowe wywołanie zwrotne onProvideAssistContent().

Urządzenia pamięci masowej z pamięcią dostosowywaną

W tej wersji użytkownicy mogą przyjmować zewnętrzne urządzenia pamięci masowej, takie jak karty SD. Po przyjęciu zewnętrznego urządzenia pamięci masowej zostanie ono zaszyfrowane i sformatowane tak, aby działało jak pamięć wewnętrzna. Ta funkcja umożliwia użytkownikom przenoszenie aplikacji i danych prywatnych tych aplikacji między urządzeniami pamięci masowej. Podczas przenoszenia aplikacji system uwzględnia preferencję android:installLocation w manifeście.

Jeśli Twoja aplikacja ma dostęp do tych interfejsów API lub pól, pamiętaj, że ścieżki plików, które zwracają, będą się dynamicznie zmieniać, gdy aplikacja zostanie przeniesiona między pamięcią wewnętrzną a zewnętrzną. Podczas tworzenia ścieżek do plików zdecydowanie zalecamy dynamiczne wywoływanie tych interfejsów API. Nie używaj ścieżek plików zakodowanych na stałe ani nie przechowuj w sposób trwały w pełni kwalifikowanych ścieżek plików utworzonych wcześniej.

Aby debugować tę funkcję, możesz włączyć obsługę dysku USB podłączonego do urządzenia z Androidem za pomocą kabla USB OTG, uruchamiając to polecenie:

$ adb shell sm set-force-adoptable true

Powiadomienia

Ta wersja wprowadza w interfejsie API te zmiany dotyczące powiadomień:

Obsługa rysika Bluetooth

Ta wersja zapewnia lepszą obsługę danych wejściowych użytkownika za pomocą rysika Bluetooth. Użytkownicy mogą sparować i połączyć zgodny rysik Bluetooth z telefonem lub tabletem. Podczas połączenia informacje o pozycji z ekranu dotykowego są łączone z informacjami o nacisku i przycisku z rysika, co zapewnia większy zakres ekspresji niż w przypadku samego ekranu dotykowego. Aplikacja może nasłuchiwać naciśnięć przycisku rysika i wykonywać działania dodatkowe, rejestrując obiekty View.OnContextClickListener i GestureDetector.OnContextClickListener w aktywności.

Użyj metod i stałych MotionEvent, aby wykrywać interakcje z przyciskiem rysika:

Ulepszone skanowanie Bluetooth Low Energy

Jeśli Twoja aplikacja przeprowadza skanowanie Bluetooth Low Energy, użyj nowejsetCallbackType() metody, aby określić, że chcesz, aby system powiadamiał wywołania zwrotne, gdy po raz pierwszy znajdzie pakiet reklamowy pasujący do ustawionego ScanFilter lub gdy zobaczy go po długim czasie. To podejście do skanowania jest bardziej energooszczędne niż w poprzedniej wersji platformy.

Obsługa Hotspotu 2.0 w wersji 1

Ta wersja dodaje obsługę specyfikacji Hotspot 2.0 w wersji 1 na urządzeniach Nexus 6 i Nexus 9. Aby udostępnić w aplikacji dane logowania Hotspot 2.0, użyj nowych metod klasy WifiEnterpriseConfig, takich jak setPlmn() i setRealm(). W obiekcie WifiConfiguration możesz ustawić pola FQDN i providerFriendlyName. Nowa metoda isPasspointNetwork() wskazuje, czy wykryta sieć reprezentuje punkt dostępu Hotspot 2.0.

Tryb wyświetlania 4K

Platforma umożliwia teraz aplikacjom żądanie zwiększenia rozdzielczości wyświetlacza do renderowania w 4K na zgodnym sprzęcie. Aby wysłać zapytanie o aktualną rozdzielczość fizyczną, użyj nowych interfejsów Display.ModeAPI. Jeśli interfejs jest rysowany w niższej rozdzielczości logicznej i skalowany do wyższej rozdzielczości fizycznej, pamiętaj, że rozdzielczość fizyczna zwracana przez metodę getPhysicalWidth() może się różnić od rozdzielczości logicznej zgłaszanej przez getSize().

Możesz poprosić system o zmianę rozdzielczości fizycznej 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 w rozdzielczości 4K interfejs jest nadal renderowany w rozdzielczości pierwotnej (np. 1080p) i skalowany do 4K, ale SurfaceViewobiekty mogą wyświetlać treści w rozdzielczości natywnej.

Listy ColorStateList z możliwością zmiany motywu

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, użyj zamiast nich nowych metod Context.getColorStateList() lub Context.getColor(). Te metody są też dostępne w bibliotece v4 appcompat za pomocą ContextCompat.

Funkcje audio

Ta wersja wprowadza ulepszenia w zakresie przetwarzania dźwięku na Androidzie, w tym:

  • 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 i AudioTrack.Builder do tworzenia obiektów przechwytywania i odtwarzania dźwięku cyfrowego oraz konfigurowania właściwości źródła i odbiornika dźwięku w celu zastąpienia ustawień domyślnych systemu.
  • Punkty zaczepienia interfejsu API do łączenia urządzeń audio i wejściowych. Jest to szczególnie przydatne, jeśli aplikacja umożliwia użytkownikom rozpoczęcie wyszukiwania głosowego za pomocą kontrolera do gier lub pilota podłączonego do Androida TV. Gdy użytkownik rozpocznie wyszukiwanie, system wywoła funkcję zwrotną new onSearchRequested(). Aby sprawdzić, czy urządzenie wejściowe użytkownika ma wbudowany mikrofon, pobierz obiekt InputDevice z tego wywołania zwrotnego, a następnie wywołaj nową metodę hasMicrophone().
  • Nowa metoda getDevices(), która umożliwia pobranie listy wszystkich urządzeń audio aktualnie podłączonych do systemu. Możesz też zarejestrować AudioDeviceCallbackobiekt, jeśli chcesz, aby system powiadamiał Twoją aplikację o podłączeniu lub odłączeniu urządzenia audio.

Funkcje wideo

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 sposób nieblokujący i zwracane za pomocą wywołania zwrotnego. Obsługuje też dynamiczną szybkość odtwarzania.
  • Nowe zdarzenie EVENT_SESSION_RECLAIMED, które oznacza, ż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 odzyskanej sesji.
  • Nowy kod błędu ERROR_RECLAIMED, który wskazuje, że menedżer zasobów odzyskał zasób multimedialny używany przez kodek. Z tym wyjątkiem kodek musi zostać zwolniony, ponieważ przeszedł do stanu końcowego.
  • Nowy interfejs getMaxSupportedInstances(), który podpowiada maksymalną liczbę obsługiwanych instancji kodeka działających jednocześnie.
  • Nowa metoda setPlaybackParams() ustawiania szybkości odtwarzania multimediów w przypadku odtwarzania w zwolnionym lub przyspieszonym tempie. Automatycznie rozciąga lub przyspiesza odtwarzanie dźwięku w połączeniu z filmem.

Funkcje aparatu

Ta wersja zawiera te nowe interfejsy API, które umożliwiają dostęp do latarki aparatu i ponowne przetwarzanie obrazów przez aparat:

Flashlight API

Jeśli urządzenie z aparatem ma lampę błyskową, możesz wywołać metodę setTorchMode() , aby włączyć lub wyłączyć tryb latarki lampy błyskowej bez otwierania urządzenia z aparatem. Aplikacja nie ma wyłącznego prawa własności do lampy błyskowej ani aparatu. Tryb latarki jest wyłączany i staje się niedostępny, gdy aparat jest niedostępny lub gdy inne zasoby aparatu, które utrzymują włączoną latarkę, stają się niedostępne. Inne aplikacje mogą też wywoływać setTorchMode() w celu wyłączenia trybu latarki. Gdy ostatnia aplikacja, która włączyła tryb latarki, zostanie zamknięta, tryb latarki zostanie wyłączony.

Aby zarejestrować wywołanie zwrotne, które będzie Cię informować o stanie trybu latarki, wywołaj metodę registerTorchCallback(). Gdy wywołanie zwrotne zostanie zarejestrowane po raz pierwszy, jest ono od razu wywoływane ze stanem trybu latarki wszystkich obecnie znanych urządzeń z aparatem i lampą błyskową. Jeśli tryb latarki zostanie włączony lub wyłączony, wywoływana jest metoda onTorchModeChanged().

Reprocessing API

Camera2 Interfejs API został rozszerzony o obsługę ponownego przetwarzania obrazów w formatach YUV i prywatnych nieprzezroczystych. Aby sprawdzić, czy te możliwości ponownego przetwarzania są dostępne, wywołaj funkcję getCameraCharacteristics() i sprawdź, czy występuje klucz REPROCESS_MAX_CAPTURE_STALL. Jeśli urządzenie obsługuje ponowne przetwarzanie, możesz utworzyć sesję przechwytywania z możliwością ponownego przetwarzania, wywołując createReprocessableCaptureSession(), i utworzyć żądania ponownego przetwarzania bufora wejściowego.

Użyj klasy ImageWriter, aby połączyć przepływ bufora wejściowego z wejściem ponownego przetwarzania kamery. Aby uzyskać pusty bufor, postępuj zgodnie z tym modelem programowania:

  1. Wywołaj metodę dequeueInputImage().
  2. Wypełnij bufor wejściowy danymi.
  3. 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 przekaż PRIVATE bezpośrednio do ImageWriter, wywołując metodę queueInputImage() bez kopiowania bufora.

Klasa ImageReader obsługuje teraz strumienie obrazów w formacie PRIVATE. Dzięki temu aplikacja może utrzymywać cykliczną kolejkę obrazów wyjściowych ImageReader, wybierać jeden lub więcej obrazów i wysyłać je do ImageWriter w celu ponownego przetworzenia przez aparat.

Funkcje Androida w pracy

Ta wersja zawiera te nowe interfejsy API Androida w pracy:

  • Ulepszone opcje sterowania w przypadku urządzeń należących do firmy i przeznaczonych do jednego zastosowania: właściciel urządzenia może teraz kontrolować te ustawienia, aby usprawnić zarządzanie urządzeniami należącymi do firmy i przeznaczonymi do jednego zastosowania (COSU):
    • Wyłącz lub ponownie włącz blokadę klawiatury za pomocą metody setKeyguardDisabled().
    • Wyłącz lub ponownie włącz pasek stanu (w tym szybkie ustawienia, powiadomienia i gest przesunięcia w górę, który uruchamia Google Now) za pomocą metody setStatusBarDisabled().
    • Wyłącz lub ponownie włącz bezpieczny rozruch za pomocą stałej UserManagerDISALLOW_SAFE_BOOT.
    • Zapobiegaj wyłączaniu się ekranu, gdy urządzenie jest podłączone do zasilania, za pomocą stałej STAY_ON_WHILE_PLUGGED_IN.
  • Cicha instalacja 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 PackageInstaller API, niezależnie od Google Play na urządzenia służbowe. Możesz teraz udostępniać urządzenia za pomocą właściciela urządzenia, który pobiera i instaluje aplikacje bez interakcji użytkownika. Ta funkcja jest przydatna do włączania kiosków lub innych podobnych urządzeń za pomocą jednego kliknięcia bez aktywowania konta Google.
  • Cichy dostęp do certyfikatu przedsiębiorstwa: gdy aplikacja wywołuje choosePrivateKeyAlias(), zanim użytkownik zostanie poproszony o wybranie certyfikatu, właściciel profilu lub urządzenia może teraz wywołać metodę onChoosePrivateKeyAlias() w celu cichego przekazania aliasu do aplikacji, która go zażądała. Ta funkcja umożliwia przyznawanie zarządzanym aplikacjom dostępu do certyfikatów bez interakcji użytkownika.
  • Automatyczne akceptowanie aktualizacji systemu. Ustawiając zasady aktualizacji systemu za pomocą setSystemUpdatePolicy(), właściciel urządzenia może teraz automatycznie akceptować aktualizację systemu, np. w przypadku urządzenia kioskowego, lub odłożyć aktualizację i uniemożliwić użytkownikowi jej przeprowadzenie przez maksymalnie 30 dni. Administrator może też ustawić dzienne okno czasowe, w którym musi zostać przeprowadzona aktualizacja, np. w godzinach, gdy urządzenie kiosku nie jest używane. Gdy dostępna jest aktualizacja systemu, system sprawdza, czy aplikacja kontrolera zasad dotyczących urządzeń ustawiła zasady aktualizacji systemu, i odpowiednio się zachowuje.
  • Delegowane instalowanie certyfikatów: właściciel profilu lub urządzenia może teraz przyznać aplikacji innej firmy możliwość wywoływania tych DevicePolicyManager interfejsów API do zarządzania certyfikatami:
  • Telefon komórkowy z funkcją powiadomień o stanie pracy w Androidzie na potrzeby pracy
  • Śledzenie użycia danych. Właściciel profilu lub urządzenia może teraz wysyłać zapytania o statystyki wykorzystania danych widoczne w sekcji Ustawienia > Wykorzystanie danych, korzystając z nowych metod NetworkStatsManager. Właściciele profili automatycznie otrzymują uprawnienia do wysyłania zapytań dotyczących danych w zarządzanym przez siebie profilu, a właściciele urządzeń uzyskują dostęp do danych o użytkowaniu zarządzanego głównego użytkownika.
  • Zarządzanie uprawnieniami w czasie działania:

    Właściciel profilu lub urządzenia może ustawić zasady uprawnień dla wszystkich żądań czasu działania wszystkich aplikacji za pomocą setPermissionPolicy(), aby wyświetlać użytkownikowi prośbę o przyznanie uprawnień lub automatycznie przyznawać lub odmawiać uprawnień bez powiadamiania użytkownika. Jeśli ta zasada jest skonfigurowana, użytkownik nie może modyfikować 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 Ustawieniach > Więcej > VPN. Dodatkowo powiadomienia towarzyszące korzystaniu z sieci VPN są teraz dostosowane do sposobu jej konfiguracji. W przypadku właściciela profilu powiadomienia zależą od tego, czy sieć VPN jest skonfigurowana dla profilu zarządzanego, profilu osobistego czy obu tych profili. W przypadku właściciela urządzenia powiadomienia zależą od tego, czy sieć VPN jest skonfigurowana dla całego urządzenia.
  • Powiadomienie o stanie pracy: gdy aplikacja z profilu zarządzanego jest aktywna na pierwszym planie, na pasku stanu pojawia się ikona teczki. Jeśli urządzenie zostanie odblokowane bezpośrednio w wyniku działania aplikacji w profilu zarządzanym, wyświetli się komunikat informujący użytkownika, że znajduje się w profilu służbowym.