Interfejsy API Androida 6.0

Android 6.0 (M) oferuje nowe funkcje dla użytkowników i deweloperów aplikacji. Ten dokument zawiera wprowadzenie do najbardziej znanych interfejsów API.

Zacznij tworzyć aplikacje

Aby zacząć tworzyć aplikacje na Androida 6.0, musisz najpierw pobrać pakiet SDK do Androida. Następnie za pomocą Menedżera pakietów SDK pobierz pakiet SDK platformy i obrazy systemowe na Androida 6.0.

Aktualizowanie docelowego poziomu interfejsu API

Aby lepiej zoptymalizować aplikację pod kątem urządzeń z Androidem, ustaw parametr targetSdkVersion na "23", zainstaluj aplikację na obrazie systemu Android, przetestuj ją, a potem opublikuj zaktualizowaną aplikację z tą zmianą.

Możesz korzystać z interfejsów API Androida, a jednocześnie obsługiwać starsze wersje. Aby to zrobić, dodaj do kodu warunki, które będą sprawdzać poziom systemowego interfejsu API przed uruchomieniem interfejsów API, które nie są obsługiwane przez minSdkVersion. Więcej informacji o utrzymywaniu zgodności wstecznej znajdziesz w artykule Obsługa różnych wersji platformy.

Więcej informacji o tym, jak działają poziomy interfejsu API, znajdziesz w artykule Co to jest poziom interfejsu API?.

Uwierzytelnianie odciskiem palca

Ta wersja udostępnia nowe interfejsy API, które umożliwiają uwierzytelnianie użytkowników za pomocą skanowania odcisku palca na obsługiwanych urządzeniach. Korzystanie z tych interfejsów API w połączeniu z systemem Android Keystore

Aby uwierzytelnić użytkowników za pomocą skanowania odcisku palca, pobierz wystąpienie nowej klasy FingerprintManager i wywołaj metodę authenticate(). Aplikacja musi być uruchomiona na zgodnym urządzeniu z czytnikiem linii papilarnych. Musisz zaimplementować w aplikacji interfejs uwierzytelniania odciskiem palca i używać w interfejsie standardowej ikony odcisku palca na Androidzie. Ikona odcisku palca na Androidzie (c_fp_40px.png) znajduje się w przykładzie uwierzytelniania biometrycznego. Jeśli tworzysz wiele aplikacji korzystających z uwierzytelniania odciskiem palca, pamiętaj, że każda z nich musi niezależnie uwierzytelniać odcisk palca użytkownika.

Aby użyć tej funkcji w swojej aplikacji, najpierw dodaj do pliku manifestu uprawnienie USE_FINGERPRINT.

<uses-permission
        android:name="android.permission.USE_FINGERPRINT" />
Komórka z wyświetloną funkcją uwierzytelniania odciskiem palca

Aby zobaczyć implementację uwierzytelniania odciskiem palca w aplikacji, zapoznaj się z przykładem uwierzytelniania biometrycznego. Aby zobaczyć, jak można używać tych interfejsów API uwierzytelniania w połączeniu z innymi interfejsami API Androida, obejrzyj film na temat interfejsów API uwierzytelniania i płatności.

Jeśli testujesz tę funkcję, wykonaj te czynności:

  1. Zainstaluj wersję 24.3 narzędzi Android SDK Tools (jeśli jeszcze jej nie masz).
  2. Zarejestruj nowy odcisk palca w emulatorze, klikając Ustawienia > Zabezpieczenia > Odcisk cyfrowy, a potem postępuj zgodnie z instrukcjami rejestracji.
  3. Użyj emulatora, aby emulować zdarzenia dotknięcia odcisku palca za pomocą następującego 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ępnie finger touch <finger_id>.

Potwierdź dane logowania

Aplikacja może uwierzytelniać użytkowników na podstawie tego, kiedy ostatnio odblokowali oni urządzenie. Dzięki tej funkcji użytkownicy nie muszą zapamiętywać dodatkowych haseł aplikacji, a Ty nie musisz wdrażać 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, przez który po pomyślnym uwierzytelnieniu użytkownika można ponownie użyć tego samego klucza, wywołaj nową metodę setUserAuthenticationValidityDurationSeconds() podczas konfigurowania KeyGenerator lub KeyPairGenerator.

Unikaj zbyt częstego wyświetlania okna ponownego uwierzytelniania – aplikacje powinny najpierw spróbować użyć obiektu kryptograficznego, a po upływie limitu czasu użyć metody createConfirmDeviceCredentialIntent(), aby ponownie uwierzytelnić użytkownika w aplikacji.

Łączenie aplikacji

Ta wersja rozszerza system intencji Androida, zapewniając bardziej zaawansowane łączenie aplikacji. Ta funkcja pozwala na 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 określonego linku internetowego i pomijać prośbę o wybranie aplikacji. Więcej informacji o implementowaniu tej funkcji znajdziesz w sekcji Obsługa linków aplikacji.

Automatyczna kopia zapasowa aplikacji

System wykonuje teraz automatyczne tworzenie pełnej kopii zapasowej i przywracanie danych z aplikacji. Aby można było włączyć to zachowanie, Twoja aplikacja musi być kierowana na Androida 6.0 (poziom interfejsu API 23). Nie musisz dodawać żadnego dodatkowego kodu. Jeśli użytkownik usunie swoje konta Google, ich dane kopii zapasowej również zostaną usunięte. Aby dowiedzieć się, jak działa ta funkcja i jak skonfigurować kopie zapasowe elementów w systemie plików, przeczytaj informacje o konfigurowaniu Automatycznej kopii zapasowej w aplikacjach.

Udostępnianie bezpośrednie

Dolna część komórki z widoczną funkcją udostępniania bezpośredniego

Ta wersja udostępnia interfejsy API, dzięki którym udostępnianie treści jest intuicyjne i szybkie. Możesz teraz określić cele udostępniania bezpośredniego, które będą wywoływać określone działanie w Twojej aplikacji. Takie cele są widoczne dla użytkowników w menu Udostępnij. Ta funkcja pozwala użytkownikom udostępniać treści wybranym osobom (takim jak kontakty) w innych aplikacjach. Na przykład cel udostępniania bezpośredniego może uruchamiać działanie w innej aplikacji sieci społecznościowej, co pozwala użytkownikowi udostępniać treści bezpośrednio określonemu znajomemu lub społeczności w tej aplikacji.

Aby włączyć cele udostępniania bezpośredniego, 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.

Przykład poniżej pokazuje, jak zadeklarować właściwość 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>

Do każdej aktywności, którą chcesz udostępnić ChooserTargetService, dodaj w manifeście aplikacji element <meta-data> o nazwie "android.service.chooser.chooser_target_service".

<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 udostępnia nowy interfejs Voice Inter API, który w połączeniu z komendami głosowymi umożliwia dodawanie funkcji głosowych do aplikacji. Wywołaj metodę isVoiceInteraction(), aby określić, czy komenda głosowa wywołała aktywność. Jeśli tak, aplikacja może użyć klasy VoiceInteractor, aby poprosić użytkownika o potwierdzenie głosowe, wybrać opcję z listy i wykonać inne działania.

Większość interakcji głosowych jest wywoływana przez komendy głosowe użytkownika. Interakcja głosowa również może się rozpocząć bez udziału użytkownika. Na przykład inna aplikacja uruchomiona poprzez interakcję głosową również może wysłać prośbę o zainicjowanie interakcji głosowej. Aby określić, czy aktywność jest inicjowana przez zapytanie głosowe użytkownika czy w innej aplikacji do interakcji głosowej, wywołaj metodę isVoiceInteractionRoot(). Jeśli inna aplikacja uruchomiła aktywność, metoda zwraca false. Aplikacja może następnie poprosić użytkownika o potwierdzenie, że zamierzał zrobić to działanie.

Więcej informacji o wdrażaniu komend głosowych znajdziesz w witrynie dla deweloperów komend głosowych.

Interfejs API Asystenta

Ta wersja oferuje użytkownikom nowy sposób korzystania z aplikacji z pomocą asystenta. Aby można było korzystać z tej funkcji, użytkownik musi włączyć Asystenta na podstawie bieżącego kontekstu. Po włączeniu tej funkcji użytkownik może przywołać asystenta w dowolnej aplikacji, przytrzymując przycisk ekranu głównego.

Aplikacja może zdecydować, że nie chce udostępniać aktualnego kontekstu Asystentowi, ustawiając flagę FLAG_SECURE. Oprócz standardowego zestawu informacji, które platforma przekazuje do asystenta, aplikacja może udostępniać dodatkowe informacje, używając nowej klasy AssistContent.

Aby przekazać asystentowi dodatkowy kontekst z aplikacji, wykonaj te czynności:

  1. Wdróż interfejs Application.OnProvideAssistDataListener.
  2. Zarejestruj tego detektor za pomocą registerOnProvideAssistDataListener().
  3. Aby podać informacje kontekstowe związane z konkretną aktywnością, zastąp wywołanie zwrotne onProvideAssistData() i opcjonalnie nowe wywołanie zwrotne onProvideAssistContent().

Urządzenia do przechowywania danych

Ta wersja umożliwia użytkownikom korzystanie z zewnętrznych urządzeń pamięci masowej, takich jak karty SD. Korzystanie z zewnętrznego urządzenia pamięci masowej szyfruje i formatuje je tak, aby działało jak pamięć wewnętrzna. Ta funkcja pozwala użytkownikom przenosić aplikacje i prywatne dane z tych aplikacji między urządzeniami pamięci. Podczas przenoszenia aplikacji system respektuje ustawienie android:installLocation w pliku manifestu.

Jeśli aplikacja uzyskuje dostęp do tych interfejsów API lub pól, pamiętaj, że zwracane przez nie ścieżki do plików zmieniają się dynamicznie podczas przenoszenia aplikacji między wewnętrznymi i zewnętrznymi urządzeniami pamięci. Zdecydowanie zalecamy, aby podczas tworzenia ścieżek plików zawsze wywoływać te interfejsy API dynamiczne. Nie używaj zakodowanych na stałe ścieżek do plików ani zachowuj w pełni kwalifikowanych ścieżek do plików, które zostały utworzone wcześniej.

Aby debugować tę funkcję, możesz umożliwić użycie dysku USB podłączonego do urządzenia z Androidem za pomocą kabla USB On-The-Go (OTG), uruchamiając to polecenie:

$ adb shell sm set-force-adoptable true

Powiadomienia

W tej wersji wprowadziliśmy następujące zmiany w interfejsie API w powiadomieniach:

Obsługa rysika Bluetooth

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

Do wykrywania interakcji przycisku rysika używaj stałych metod i stałych MotionEvent:

Ulepszone skanowanie Bluetooth Low Energy

Jeśli Twoja aplikacja wykonuje skanowania Bluetooth Low Energy, użyj nowej metody setCallbackType(), aby określić, że system ma powiadamiać wywołania zwrotne, gdy po raz pierwszy znajdzie pakiet reklamowy pasujący do zestawu ScanFilter. Takie podejście do skanowania jest bardziej energooszczędne niż poprzednia wersja platformy.

Pomoc do Hotspot 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ć dane logowania do hotspotu 2.0 w aplikacji, 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 zmiany rozdzielczości ekranu na 4K na zgodnym sprzęcie. Aby przesł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 zmienia się w większą rozdzielczość fizyczną, pamiętaj, że rozdzielczość fizyczna zwracana przez metodę getPhysicalWidth() może się różnić od rozdzielczości logicznej zgłaszanej przez funkcję getSize().

Możesz poprosić system o zmianę rozdzielczości fizycznej podczas używania aplikacji, ustawiając właściwość preferredDisplayModeId okna aplikacji. Ta funkcja jest przydatna, gdy chcesz przełączyć się na rozdzielczość 4K. W trybie wyświetlania 4K interfejs użytkownika jest renderowany w oryginalnej rozdzielczości (np. 1080p) i skalowany do 4K. Obiekty SurfaceView mogą jednak wyświetlać treści w rozdzielczości natywnej.

Motywalne 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łaj 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 ulepszyliśmy przetwarzanie dźwięku na Androidzie, między innymi:

  • Obsługa protokołu MIDI z nowymi interfejsami API android.media.midi. Używaj tych interfejsów API do wysyłania i odbierania zdarzeń MIDI.
  • Nowe klasy AudioRecord.Builder i AudioTrack.Builder służące do tworzenia obiektów cyfrowego przechwytywania i odtwarzania dźwięku oraz konfigurowania właściwości źródła dźwięku i ujścia tak, aby zastępowały wartości domyślne systemu.
  • Punkty zaczepienia interfejsu API służące do kojarzenia urządzeń audio i wejściowych. Jest to szczególnie przydatne, gdy Twoja aplikacja umożliwia użytkownikom rozpoczynanie wyszukiwania głosowego za pomocą kontrolera do gier lub pilota połączonego z Androidem TV. System wywołuje nowe wywołanie zwrotne onSearchRequested(), gdy użytkownik rozpoczyna wyszukiwanie. 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 podłączonych obecnie do systemu. Możesz też zarejestrować obiekt AudioDeviceCallback, jeśli chcesz, aby system powiadamiał aplikację o połączeniu lub rozłączeniu urządzenia audio.

Funkcje wideo

W tej wersji dodaliśmy nowe funkcje do interfejsów API przetwarzania wideo, w tym:

  • Nowa klasa MediaSync, która ułatwia aplikacjom synchroniczne renderowanie strumieni audio i wideo. Bufory dźwięku są przesyłane w sposób nieblokujący i zwracane w ramach 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 używa sesji DRM, musisz obsługiwać to zdarzenie i nie używać sesji odzyskanej.
  • Nowy kod błędu ERROR_RECLAIMED, który oznacza, że menedżer zasobów odzyskał zasób multimedialny używany przez kodek. Z tym wyjątkiem kodek musi zostać zwolniony, ponieważ został przeniesiony do stanu terminala.
  • Nowy interfejs getMaxSupportedInstances(), który wyświetla wskazówkę dotyczącą maksymalnej liczby obsługiwanych instancji kodeka równoczesnych.
  • Nowa metoda setPlaybackParams() do ustawiania szybkości odtwarzania multimediów na potrzeby szybkiego lub zwolnionego tempa. Dodatkowo ta funkcja automatycznie rozciąga lub przyspiesza odtwarzanie dźwięku w powiązaniu z filmem.

Funkcje aparatu

Ta wersja zawiera następujące nowe interfejsy API umożliwiające dostęp do latarki i ponowne przetwarzanie zdjęć w aparacie:

Interfejs API Flashlight

Jeśli aparat jest wyposażony w lampę błyskową, możesz wywołać metodę setTorchMode(), aby włączać i wyłączać tryb latarki bez otwierania aparatu. Aplikacja nie ma wyłącznych praw do lampy błyskowej ani kamery. Tryb latarki jest wyłączany i staje się niedostępny, gdy urządzenie z kamerą stanie się niedostępne lub gdy inne zasoby kamery obsługującej latarkę będą niedostępne. Inne aplikacje mogą też wywołać setTorchMode(), aby wyłączyć tryb latarki. Gdy ostatnia aplikacja, która włączyła tryb latarki, jest zamknięta, tryb latarki jest wyłączony.

Możesz zarejestrować wywołanie zwrotne, aby otrzymywać powiadomienia o stanie trybu pochodni, wywołując metodę registerTorchCallback(). Przy pierwszym zarejestrowanym wywołaniu zwrotnym jest ono natychmiast wywoływane w trybie latarki wszystkich znanych obecnie aparatów z lampą błyskową. Po włączeniu lub wyłączeniu trybu latarki wywoływana jest metoda onTorchModeChanged().

Interfejs API ponownego przetwarzania

Interfejs Camera2 API został rozszerzony o obsługę ponownego przetwarzania obrazów w formacie YUV i nieprzezroczystego formatu prywatnego. Aby określić, czy te możliwości ponownego przetwarzania są dostępne, wywołaj getCameraCharacteristics() i sprawdź klucz REPROCESS_MAX_CAPTURE_STALL. Jeśli urządzenie obsługuje ponowne przetwarzanie, możesz utworzyć sesję nagrywania z kamery możliwej do ponownego przetworzenia, wywołując metodę createReprocessableCaptureSession(), a następnie żądania ponownego przetwarzania bufora wejściowego.

Użyj klasy ImageWriter, aby podłączyć przepływ bufora wejściowego do danych wejściowych przetwarzających dane wejściowe przez kamerę. Aby uzyskać pusty bufor, skorzystaj z tego modelu programowania:

  1. Wywołaj metodę dequeueInputImage().
  2. Wypełnij dane do bufora wejściowego.
  3. Wyślij bufor do kamery, wywołując metodę queueInputImage().

Jeśli łączysz obiekt ImageWriter z obrazem PRIVATE, aplikacja nie ma bezpośredniego dostępu do danych obrazu. Zamiast tego przekaż obraz PRIVATE bezpośrednio do funkcji ImageWriter, wywołując metodę queueInputImage() bez kopii bufora.

Klasa ImageReader obsługuje teraz strumienie obrazów w formacie PRIVATE. Ta obsługa pozwala aplikacji utrzymywać okrągłą kolejkę obrazów z ImageReader, wybrać co najmniej 1 obraz i przesłać je do ImageWriter w celu ponownego przetworzenia przez aparat.

Funkcje Androida

Ta wersja zawiera te nowe interfejsy API Android for Work:

  • Ulepszone opcje zarządzania urządzeniami należącymi do firmy i do jednorazowego użytku: właściciel urządzenia może teraz kontrolować te ustawienia, aby usprawnić zarządzanie urządzeniami należącymi do firmy i urządzeniami do jednorazowego użytku:
  • Bezwarunkowe instalowanie i odinstalowywanie aplikacji przez właściciela urządzenia: właściciel urządzenia może teraz dyskretnie instalować i odinstalowywać aplikacje przy użyciu interfejsów API PackageInstaller, niezależnie od Google Play for Work. Urządzenia są teraz obsługiwane przez właściciela urządzenia, który pobiera i instaluje aplikacje bez udziału użytkownika. Ta funkcja przydaje się do włączania obsługi administracyjnej kiosków lub innych takich urządzeń jednym kliknięciem bez aktywacji konta Google.
  • Cichy dostęp do certyfikatu przedsiębiorstwa: gdy aplikacja wywołuje metodę choosePrivateKeyAlias(), zanim użytkownik zostanie poproszony o wybranie certyfikatu, profil lub właściciel urządzenia mogą teraz wywołać metodę onChoosePrivateKeyAlias(), aby dyskretnie przekazać alias aplikacji żądającej. Ta funkcja pozwala przyznawać zarządzanym aplikacjom dostęp do certyfikatów bez udziału użytkownika.
  • Automatyczne akceptowanie aktualizacji systemu. Ustawiając zasadę aktualizacji systemu za pomocą zasady setSystemUpdatePolicy(), właściciel urządzenia może teraz automatycznie zaakceptować aktualizację systemu (na przykład w przypadku urządzenia kiosku) lub ją odłożyć i uniemożliwić użytkownikowi jej pobranie przez 30 dni. Dodatkowo administrator może ustawić dzienny przedział czasu, w którym ma być stosowana aktualizacja, na przykład 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 działa odpowiednio.
  • Instalacja certyfikatów delegowanych: profil lub właściciel urządzenia może teraz przyznawać aplikacjom innej firmy możliwość wywoływania tych interfejsów API do zarządzania certyfikatami DevicePolicyManager:
  • Urządzenie mobilne z wyświetloną funkcją powiadomień o stanie pracy w Androidzie
  • Śledzenie użycia danych. Właściciel profilu lub urządzenia może teraz za pomocą nowych metod NetworkStatsManager wysyłać zapytania o statystyki użytkowania danych widoczne w sekcji Ustawienia > Wykorzystanie danych. Właściciele profili automatycznie otrzymują uprawnienia do wysyłania zapytań o dane w zarządzanych przez nich profilach, a właściciele urządzeń – do danych o korzystaniu z zarządzanego głównego użytkownika.
  • Zarządzanie uprawnieniami środowiska wykonawczego:

    Właściciel profilu lub urządzenia może ustawić zasady dotyczące uprawnień w przypadku wszystkich żądań w czasie działania wywoływanych przez wszystkie aplikacje korzystające z setPermissionPolicy(). Mogą one prosić użytkownika o przyznanie uprawnień albo automatycznie przyznawać je lub odrzucać w sposób dyskretny. Jeśli jest skonfigurowana ta ostatnia zasada, użytkownik nie może zmienić wyboru dokonanego przez profil ani właściciela urządzenia na ekranie uprawnień aplikacji w Ustawieniach.

  • VPN w ustawieniach: aplikacje VPN są teraz widoczne w sekcji Ustawienia > Więcej > VPN. Dodatkowo powiadomienia towarzyszące korzystaniu z sieci VPN zależą teraz od konfiguracji tej sieci VPN. W przypadku właściciela profilu powiadomienia dotyczą tego, czy sieć VPN jest skonfigurowana dla profilu zarządzanego, profilu osobistego czy dla obu tych typów profili. W przypadku właściciela urządzenia powiadomienia dotyczą tego, czy sieć VPN jest skonfigurowana dla całego urządzenia.
  • Powiadomienie o stanie pracy: za każdym razem, gdy na pierwszym planie pojawi się aktywność aplikacji z profilu zarządzanego, na pasku stanu pojawi się ikona aktówki. Ponadto jeśli urządzenie zostanie bezpośrednio odblokowane do aktywności aplikacji w profilu zarządzanym, pojawi się toast z informacją, że użytkownik korzysta z profilu służbowego.