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 ile maruz kalmaktadır android.os.HardwarePropertiesManager ve üzerinden arama yapar HardwarePropertiesManagerService donanım termal HAL (üzere hardware/libhardware/include/hardware/thermal.h ). Sadece cihaz / profil sahibinin Cihaz Politikası Denetleyicisi (DPC) uygulamaları ve güncel anlamına korumalı API'sıdır VrListenerService diyebiliriz.

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 etkinleştirir
[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 sağlamak uses-features bildirilir:

  • android.software.device_admin
  • android.software.managed_users (özelliği ilan ve eğer cihaz hafızasında en azından 2 GB sahip olması durumunda).

Bu doğrulamak için uses-feature değerleri bir cihazda ilan çalıştırmak edilmiştir: adb shell pm list features .

Yalnızca temel uygulamalar

Varsayılan olarak, yönetilen bir cihazın yetkilendirilmesinin bir parçası olarak yalnızca profilin doğru çalışması için gerekli olan uygulamalar etkinleştirilir. Unutmayın, her örnek örneklerini _managed_profile.xml dosyaları aşağıda yalnızca alakalı android.software.managed_users bildirildi. 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 aracılığıyla oluşturulan ikincil kullanıcılara uygulanır DevicePolicyManager#createAndManageUser .

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
<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
<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. Eğer kullanırsanız launcher3 değişiklik yapmadan AOSP içinde, sonra büyük olasılıkla zaten bu rozeti; özelliğini destekler.

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
<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 sağlamayı 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();
       }

       ...
   }