W tej sekcji opisano, jak włączyć i zweryfikować funkcje zarządzania urządzeniami wymagane do przygotowania urządzeń do obsługi profili zarządzanych. Obejmuje również przypadki użytkowników właścicieli urządzeń, które są niezbędne w środowisku korporacyjnym.
Oprócz kodu AOSP urządzenie wymaga następujących składników do działania z profilami zarządzanymi.
Ogólne wymagania
Urządzenia przeznaczone do obsługi zarządzania urządzeniami muszą spełniać następujące wymagania ogólne.
Termiczne wartości HAL
Android 7.0 i nowsze obejmują obsługę interfejsu API HardwarePropertiesManager, interfejsu API monitorowania urządzeń i raportowania o kondycji, który umożliwia aplikacjom wysyłanie zapytań o stan sprzętu urządzenia. Ten interfejs API jest udostępniany za pośrednictwem android.os.HardwarePropertiesManager
i wykonuje wywołania za pośrednictwem HardwarePropertiesManagerService
do sprzętowej warstwy termicznej ( hardware/libhardware/include/hardware/thermal.h
). Jest to chroniony interfejs API, co oznacza, że tylko aplikacje kontrolera zasad urządzenia (DPC) właściciela urządzenia/profilu i bieżąca VrListenerService
mogą go wywoływać.
Aby obsługiwać interfejs HardwarePropertiesManager API, implementacja termicznej warstwy HAL urządzenia musi być w stanie zgłaszać następujące wartości:
Wartość | Skala raportowania | Umożliwia |
---|---|---|
Temperatura [procesora|GPU|baterii|skóry urządzenia] | Temperatura elementu w stopniach Celsjusza | Aplikacje mogą sprawdzać temperatury urządzeń i temperatury dławienia/wyłączania komponentów |
Aktywność procesora/całkowita liczba włączonych czasów | Czas w milisekundach | Aplikacje mogą sprawdzać użycie procesora na rdzeń |
Prędkość wiatraka | RPM | Aplikacje mogą sprawdzać prędkość wentylatora |
Implementacje powinny poprawnie obsługiwać sytuacje raportowania wartości, gdy rdzeń (lub GPU, bateria, wentylator) przechodzi w tryb offline lub jest podłączony/odłączony.
Włączanie zarządzania urządzeniami
Aby włączyć zarządzanie urządzeniami, upewnij się, że zadeklarowane są następujące uses-features
:
-
android.software.device_admin
-
android.software.managed_users
(funkcja jest deklarowana wtedy i tylko wtedy, gdy urządzenie ma co najmniej 2 GB pamięci).
Aby potwierdzić, że te wartości uses-feature
zostały zadeklarowane na urządzeniu, uruchom: adb shell pm list features
.
Tylko podstawowe aplikacje
Domyślnie w ramach aprowizacji zarządzanego urządzenia włączone są tylko aplikacje niezbędne do prawidłowego działania profilu. Pamiętaj, że wszystkie przykładowe wystąpienia plików _managed_profile.xml
poniżej są istotne tylko wtedy, gdy zadeklarowano android.software.managed_users
. Producenci OEM muszą upewnić się, że zarządzany profil lub urządzenie ma wszystkie wymagane aplikacje, modyfikując:
vendor_required_apps_managed_profile.xml vendor_required_apps_managed_device.xml vendor_disallowed_apps_managed_profile.xml vendor_disallowed_apps_managed_device.xml /* * The following are for Android 9 and higher only */ vendor_required_apps_managed_user.xml vendor_disallowed_apps_managed_user.xml
Aplikacje wymagane i niedozwolone dla zarządzanych użytkowników są stosowane do użytkowników pomocniczych utworzonych za pomocą DevicePolicyManager#createAndManageUser
.
Przykłady z urządzenia Nexus
Android 8.x i starsze
pacakages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_device.xml
Android 9 i nowszy
frameworks/base/core/res/res/values/vendor_required_apps_managed_device.xml
<resources> <!-- A list of apps to be retained on the managed device --> <string-array name="vendor_required_apps_managed_device"> <item>com.android.vending</item> <!--Google Play --> <item>com.google.android.gms</item> <!--Required by Play --> <item>com.google.android.contacts</item> <!--Google or OEM Contacts--> <item>com.google.android.googlequicksearchbox</item> <!--Google Launcher --> <item>com.google.android.launcher</item> <!--Google Launcher or OEM Launcher --> <item>com.google.android.dialer</item> <!--Google or OEM dialer to enable making phone calls --> </string-array> </resources>
Android 8.x i wcześniejsze
packages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_profile.xml
Android 9 i nowszy
frameworks/base/core/res/res/values/vendor_required_apps_managed_profile.xml
<resources> <!-- A list of apps to be retained in the managed profile. This includes any Google experience apps required. --> <string-array name="vendor_required_apps_managed_profile"> <item>com.android.vending</item> <!-- Google Play --> <item>com.google.android.gms</item> <!-- Required by Play --> <item>com.google.android.contacts</item> <!-- Google or OEM Contacts --> </string-array> </resources>
Wymagania dotyczące Launchera
Należy zaktualizować program uruchamiający, aby obsługiwał aplikacje do oznaczania plakietek z ikoną (udostępnianą w AOSP w celu reprezentowania zarządzanych aplikacji) oraz innymi elementami interfejsu użytkownika plakietki, takimi jak ostatnie i powiadomienia. Jeśli używasz launchera3 w AOSP bez modyfikacji, prawdopodobnie już obsługujesz tę funkcję oznaczania.
Wymagania NFC
Urządzenia z funkcją NFC muszą włączyć NFC podczas działania od razu po wyjęciu z pudełka (tj. kreatora konfiguracji) i być skonfigurowane do akceptowania intencji zarządzanej aprowizacji:
packages/apps/Nfc/res/values/provisioning.xml
<bool name="enable_nfc_provisioning">true</bool> <item>application/com.android.managedprovisioning</item>
Wymagania instalacyjne
Urządzenia, które zawierają standardowe środowisko (tj. kreator konfiguracji), powinny zaimplementować obsługę administracyjną właściciela urządzenia. Po otwarciu środowiska out-of-box należy sprawdzić, czy inny proces (np. obsługa administracyjna właściciela urządzenia) zakończyła już konfigurację użytkownika, a jeśli tak, powinien uruchomić intencję domową i zakończyć konfigurację. Ta intencja jest przechwytywana przez aplikację do obsługi administracyjnej, która następnie przekazuje kontrolę nowo skonfigurowanemu właścicielowi urządzenia.
Aby spełnić wymagania konfiguracji, dodaj następujący kod do głównego działania konfiguracji urządzenia:
@Override protected void onStart() { super.onStart(); // When returning to a setup wizard activity, check to see if another setup process // has intervened and, if so, complete an orderly exit boolean completed = Settings.Secure.getInt(getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 0) != 0; if (completed) { startActivity(new Intent(Intent.ACTION_MAIN, null) .addCategory(Intent.CATEGORY_HOME) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED)); finish(); } ... }