Cihaz Yönetimini Uygulama

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.xml
tutucu3 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.xml
tutucu6 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.xml
tutucu8 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();
       }

       ...
   }