Bu bölüm, cihazları yönetilen profillere hazırlamak için gereken cihaz yönetimi özelliklerinin nasıl etkinleştirileceğini ve doğrulanacağını açıklar. Ayrıca, kurumsal bir ortamda gerekli olan cihaz sahibi kullanıcı durumlarını da kapsar.
AOSP koduna ek olarak, bir cihaz, yönetilen profillerle çalışmak için aşağıdaki bileşenleri gerektirir.
Genel Gereksinimler
Cihaz yönetimini desteklemeyi amaçlayan cihazlar aşağıdaki genel gereksinimleri karşılamalıdır.
Termal HAL değerleri
Android 7.0 ve sonraki sürümleri, uygulamaların cihaz donanımının durumunu sorgulamasını sağlayan bir cihaz izleme ve sistem durumu raporlama API'si olan HardwarePropertiesManager API desteği içerir. Bu API, android.os.HardwarePropertiesManager
aracılığıyla sunulur ve HardwarePropertiesManagerService
aracılığıyla donanım termal HAL'sine ( hardware/libhardware/include/hardware/thermal.h
) çağrı yapar. Korumalı bir API'dir, yani yalnızca cihaz/profil sahibi Device Policy Controller (DPC) uygulamaları ve mevcut VrListenerService
onu çağırabilir.
HardwarePropertiesManager API'sini desteklemek için, aygıt termal HAL uygulamasının aşağıdaki değerleri bildirebilmesi gerekir:
Değer | Raporlama Ölçeği | sağlar |
---|---|---|
[CPU|GPU|Pil|Cihaz Dış Görünümü] Sıcaklığı | Santigrat derece cinsinden bileşenin sıcaklığı | Uygulamalar, cihaz sıcaklıklarını ve bileşen kısma/kapatma sıcaklıklarını kontrol edebilir |
CPU aktif/toplam etkinleştirme süreleri | Milisaniye cinsinden süre | Uygulamalar, çekirdek başına CPU kullanımını kontrol edebilir |
Pervane hızı | devir | Uygulamalar fan hızını kontrol edebilir |
Uygulamalar, bir çekirdek (veya GPU, pil, fan) çevrimdışı olduğunda veya takılı/çıkarıldığında raporlama değerleri durumlarını doğru şekilde ele almalıdır.
Cihaz yönetimini etkinleştirme
Cihaz yönetimini etkinleştirmek için aşağıdaki uses-features
bildirildiğinden emin olun:
-
android.software.device_admin
-
android.software.managed_users
(özellik, yalnızca cihazın en az 2 GB belleği varsa bildirilir.)
Bu uses-feature
değerlerinin bir cihazda bildirildiğini doğrulamak için şunu çalıştırın: adb shell pm list features
feature .
Yalnızca temel uygulamalar
Varsayılan olarak, yönetilen bir cihaz sağlamanın bir parçası olarak yalnızca profilin doğru çalışması için gerekli olan uygulamalar etkinleştirilir. Aşağıdaki _managed_profile.xml
dosyalarının tüm örnek örneklerinin yalnızca android.software.managed_users
bildirilmişse alakalı olduğunu unutmayın. OEM'ler, aşağıdakileri değiştirerek yönetilen profilin veya cihazın gerekli tüm uygulamalara sahip olmasını sağlamalıdır:
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
Yönetilen kullanıcılar için gerekli ve izin verilmeyen uygulamalar, DevicePolicyManager#createAndManageUser
aracılığıyla oluşturulan ikincil kullanıcılara uygulanır.
Nexus cihazından örnekler
Android 8.x ve önceki sürümler
pacakages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_device.xml
Android 9 ve üstü
frameworks/base/core/res/res/values/vendor_required_apps_managed_device.xmltutucu3 l10n-yer
<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 ve önceki sürümler
packages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_profile.xml
Android 9 ve üstü
frameworks/base/core/res/res/values/vendor_required_apps_managed_profile.xmltutucu6 l10n-yer
<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>
Başlatıcı gereksinimleri
Simge rozeti (yönetilen uygulamaları temsil etmek için AOSP'de sağlanır) ve son bilgiler ve bildirimler gibi diğer rozet kullanıcı arabirimi öğeleriyle rozet uygulamalarını desteklemek için Başlatıcı'yı güncellemeniz gerekir. AOSP'de launcher3'ü değişiklik yapmadan kullanırsanız, muhtemelen bu rozet özelliğini zaten destekliyorsunuzdur.
NFC gereksinimleri
NFC'ye sahip cihazlar, kullanıma hazır deneyim (yani kurulum sihirbazı) sırasında NFC'yi etkinleştirmeli ve yönetilen sağlama amaçlarını kabul edecek şekilde yapılandırılmalıdır:
packages/apps/Nfc/res/values/provisioning.xmltutucu8 l10n-yer
<bool name="enable_nfc_provisioning">true</bool> <item>application/com.android.managedprovisioning</item>
Kurulum gereksinimleri
Kullanıma hazır bir deneyim (yani kurulum sihirbazı) içeren cihazlar, cihaz sahibi yetkilendirmesini uygulamalıdır. Kullanıma hazır deneyim açıldığında, başka bir işlemin (cihaz sahibi temel hazırlığı gibi) kullanıcı kurulumunu tamamlayıp tamamlamadığını kontrol etmeli ve eğer öyleyse, bir ana amaç başlatmalı ve kurulumu bitirmelidir. Bu amaç, daha sonra kontrolü yeni ayarlanan cihaz sahibine veren sağlama uygulaması tarafından yakalanır.
Kurulum gereksinimlerini karşılamak için aşağıdaki kodu cihaz kurulumunun ana etkinliğine ekleyin:
@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(); } ... }