Cihaz yönetimine genel bakış

Cihaz yöneticisi desteğinin sonlandırılması. Android 9 (API seviyesi 28) sürümünden itibaren, bazı yönetici politikaları bir cihaz yöneticisi tarafından çağrıldığında desteği sonlandırılmış olarak işaretlenecek. Bu değişikliğe hemen hazırlanmaya başlamanızı öneririz. Öğrenmek için taşıma seçeneklerini görmek için Cihaz yöneticisi desteğinin sonlandırılması.

Android, Android'in sunduğu Android Cihaz Yönetimi API'si. Device Management API, kullanıcıların düzeyinde değerlendirmeniz olacaktır. Bu API'ler, BT uzmanlarının çalışan cihazları üzerinde zengin kontrole ihtiyaç duyduğu kurumsal ortamlarda faydalı olan, güvenlik bilinciyle tasarlanmış uygulamalar oluşturmanıza olanak tanır. Örneğin, yerleşik Android E-posta uygulaması, Exchange desteğini iyileştirmek için bu API'lerden yararlanmıştır. Exchange yöneticileri, E-posta uygulaması aracılığıyla alfasayısal veya sayısal şifreler dahil olmak üzere şifre politikalarını zorunlu kılma PIN'ler — tüm cihazlarda. Yöneticiler, kayıp veya çalınmış cep telefonlarını da uzaktan silebilir (yani fabrika varsayılan ayarlarına geri yükleyebilir). Exchange kullanıcıları e-posta ve takvim verilerini senkronize edebilir.

Bu belge, Android destekli cihazlar için kurumsal çözümler geliştirmek isteyen geliştiriciler için hazırlanmıştır. Bu makalede, Android tarafından desteklenen çalışan cihazları için daha güçlü güvenlik sağlamak amacıyla Device Administration API tarafından sunulan çeşitli özellikler ele alınmaktadır.

Not Android for Work dağıtımları için iş politikası denetleyici oluşturma hakkında bilgi edinmek istiyorsanız Cihaz Politikası Denetleyici oluşturma başlıklı makaleyi inceleyin.

Gözetimsiz Cihaz Sahibi Modu

Android 14 (API düzeyi 34) sürümünde, gözetimsiz sistem kullanıcısı modu kullanıma sunuldu ( hangi UserManager.isHeadlessSystemUserMode true değerini döndürür). Gözetimsiz Sistem Kullanıcısı modunda sistem kullanıcısı arka plan kullanıcısıdır ve son kullanıcı için ek ön plan bahsedeceğim. Android 14'te, cihaz sahibinin ayarlandığı sistem kullanıcısı dışındaki tüm ilişkili kullanıcılara bir profil sahibi ekleyen gözetimsiz cihaz sahibi ilişkili modu da kullanıma sunulmuştur.

Gözetimsiz sistem kullanıcısı (sistem kullanıcısının arka planda çalışır), yalnızca kapsam dahilinde olan cihaz politikaları (tüm kullanıcılar için geçerli politikalar) ön plandaki kullanıcıya uygulanır veya kullanıcılarla paylaşabilir. Görüntüleyin addUserRestriction inceleyebilirsiniz.

Android cihaz üreticileri rehberlik source.android.com'da yayınlandı.

Device management API'ye genel bakış

Cihaz Yönetimi API'yi kullanabilecek uygulama türlerine örnekler:

  • E-posta istemcileri.
  • Uzaktan silme yapan güvenlik uygulamaları.
  • Cihaz yönetimi hizmetleri ve uygulamaları.

İşleyiş şekli

Kullanıcıların istediği cihaz yönetimi uygulamalarını yazmak için yüklüyor. Cihaz yöneticisi uygulaması, istenen politikaları uygular. İşleyiş şekli:

  • Bir sistem yöneticisi, uzaktan/yerel cihaz güvenliği politikaları. Bu politikalar tek veya veya uygulama, politikaları bir üçüncü taraftan dinamik olarak sunucu.
  • Uygulama, kullanıcıların cihazlar. Android , şu anda otomatik bir temel hazırlık çözümüne sahip değil. Bir sistem yöneticisinin aşağıdaki gibi dağıtabilirsiniz:
    • Google Play.
    • Başka bir mağazadan yükleme etkinleştiriliyor.
    • Uygulamayı e-posta veya web siteleri gibi diğer yöntemlerle dağıtmak
  • Sistem, kullanıcıdan cihaz yönetimi uygulamasını etkinleştirmesini ister. Nasıl? Bunun ne zaman gerçekleşeceği uygulamanın nasıl uygulandığına bağlıdır.
  • Kullanıcılar cihaz yöneticisi uygulamasını etkinleştirdikten sonra uygulamanın politikalarına tabi olur. Bu politikalara uymak genellikle aşağıdakiler gibi avantajlar sağlar: hassas sistemlere ve verilere erişmelerine yardımcı olur.

Kullanıcılar cihaz yönetimi uygulamasını etkinleştirmezse uygulama etkin olmayan bir şekilde cihazda kalır. Kullanıcılar, uygulamanın politikalarına tabi olmaz. Ayrıca, uygulamanın hiçbir avantajından yararlanamaz. Örneğin, verileri senkronize edemeyebilirler.

Bir kullanıcı politikalara uymazsa (örneğin, bir kullanıcı bir şifre belirleyecekseniz, uygulama kararına ele alacağız. Ancak bu genellikle kullanıcının verileri senkronize edebiliyorsunuz.

Bir cihaz, politika gerektirmeyen bir sunucuya bağlanmaya çalışırsa Device Management API'sinde destekleniyorsa bağlantı izin verilebilir. Cihaz Yönetimi API'si şu anda kısmi temel hazırlığa izin vermemektedir. Başka bir deyişle, bir cihaz (örneğin, eski bir cihaz) belirtilen tüm politikaları desteklemediğinden, veya cihaza bağlı.

Bir cihazda birden fazla etkin yönetici uygulaması varsa en katı politika uygulanır. Belirli bir yönetici uygulamasını hedeflemek mümkün değildir.

Mevcut bir cihaz yönetimi uygulamasının yüklemesini kaldırmak için kullanıcıların şunları yapması gerekir: önce uygulamanın yönetici kaydını iptal edin.

Politikalar

Kurumsal ortamlarda, çalışan cihazlarının çoğu zaman cihazın kullanımını yöneten katı politikalara uyar. İlgili içeriği oluşturmak için kullanılan Device Management API, Tablo 1'de listelenen politikaları destekler. Device Administration API'nin şu anda yalnızca ekran kilidi şifrelerini desteklediğini unutmayın:

Tablo 1. Cihaz Yönetimi API'si tarafından desteklenen politikalar.

Politika Açıklama
Şifre etkinleştirildi Cihazların PIN veya şifre istemesi gerekir.
Minimum şifre uzunluğu Şifre için gerekli karakter sayısını belirleyin. Örneğin, PIN veya şifrelerin en az altı karakterden oluşmasını gerektirebilir.
Alfa-sayısal şifre gerekli Şifrelerin harf ve rakamlardan oluşmasını zorunlu kılar. Sembolik karakterler içerebilir.
Karmaşık şifre gerekiyor Şifrelerin en az bir harf, bir rakam ve bir özel sembol içermesini gerektirir. Android 3.0'ta kullanıma sunulmuştur.
Şifrede gereken minimum harf sayısı Kullanılabilen minimum tüm yöneticiler veya belirli bir yönetici için şifrede zorunlu olan harfler. Android 3.0 sürümünde kullanıma sunuldu.
Şifrede minimum küçük harf sayısı Minimum küçük harf sayısı tüm yöneticiler veya belirli bir yönetici için şifrede zorunlu olan harfler. Android 3.0 sürümünde kullanıma sunuldu.
Şifrede harf olmayan minimum karakter sayısı Tüm yöneticiler veya belirli bir yönetici için şifrede kullanılması zorunlu olan minimum harf olmayan karakter sayısı. Android 3.0 sürümünde kullanıma sunuldu.
Şifrede gereken minimum sayısal basamak sayısı Tüm yöneticiler veya belirli bir yönetici için şifrede kullanılması gereken minimum sayısal basamak sayısı. Android 3.0'ta kullanıma sunulmuştur.
Şifrede kullanılması gereken minimum simge sayısı Tüm yöneticiler veya belirli bir yönetici için şifrede kullanılması gereken minimum simge sayısı. Android 3.0 sürümünde kullanıma sunuldu.
Şifrede gereken minimum büyük harf sayısı Tüm yöneticiler veya belirli bir yönetici için şifrede gereken minimum büyük harf sayısı. Android 3.0'ta kullanıma sunulmuştur.
Şifre süre sonu zaman aşımı Şifrenin süresinin dolacağı zaman. Cihaz yöneticisinin geçerlilik bitiş zaman aşımını belirlediği andan itibaren milisaniye cinsinden delta cinsinden ifade edilir. Android 3.0 sürümünde kullanıma sunuldu.
Şifre geçmişi kısıtlaması Bu politika, kullanıcıların son n benzersiz şifreyi yeniden kullanmasını engeller. Bu politika genellikle setPasswordExpirationTimeout(), zorunlu kılar . Android 3.0 sürümünde kullanıma sunuldu.
Maksimum başarısız şifre denemesi sayısı Kullanıcının cihaz verilerini siler. Device Management API, yöneticilerin şunları da yapmasına olanak tanır: cihazı uzaktan fabrika varsayılan ayarlarına sıfırlama Bu sayede, kaybolduğunda veya çalındığında.
Maksimum işlemsizlik süresi kilidi Cihazın ekranı kilitlemeden önce kullanıcının ekrana en son dokunmasından veya bir düğmeye basmasından itibaren geçecek süreyi belirler. Bu durumda, kullanıcıların cihazlarını kullanabilmek ve verilere erişebilmek için PIN'lerini veya şifrelerini tekrar girmeleri gerekir. Değer 1 ile 60 dakika arasında olabilir.
Depolama alanı şifrelemesini zorunlu kılma Cihaz destekliyorsa depolama alanının şifreleneceğini belirtir. Android 3.0 sürümünde kullanıma sunuldu.
Kamerayı devre dışı bırak Kameranın devre dışı bırakılması gerektiğini belirtir. Bu işlemin kalıcı olarak devre dışı bırakmak zorunda olmadığını unutmayın. Kamera dinamik olarak etkinleştirilebilir/devre dışı bırakılabilir bağlam, zaman ve başka kriterlere göre değişiyor. Android 4.0'ta kullanıma sunulmuştur.

Diğer özellikler

Cihaz, yukarıdaki tabloda listelenen politikaları desteklemenin yanı sıra, Yönetim API'si aşağıdakileri yapmanıza olanak tanır:

  • Kullanıcıdan yeni bir şifre belirlemesini isteyin.
  • Cihazı hemen kilitleyin.
  • Cihazdaki verileri temizleyin (yani, cihazı fabrika varsayılan ayarlarına geri yükleyin).

Örnek uygulama

Bu sayfada kullanılan örnekler Device Management API'ye dayalıdır. örneği ( Android SDK Manager) ve sisteminizde şu şekilde bulunur: <sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java

Örnek uygulama, cihaz yöneticisi özelliklerinin bir demosunu sunar. Kullanıcılara, cihaz yöneticisi uygulamasını etkinleştirmelerine olanak tanıyan bir kullanıcı arayüzü sunar. Uygulamayı etkinleştirdikten sonra kullanıcılar, kullanıcı arayüzündeki düğmeleri kullanarak aşağıdakileri yapabilir:

  • Şifre kalitesini ayarlayın.
  • Kullanıcının şifresi için minimum uzunluk, içermesi gereken minimum sayısal karakter sayısı vb. koşulları belirtin.
  • Şifreyi ayarlayın. Şifre, sistem bir hata döndürür.
  • Cihazın silinmeden (yani fabrika ayarlarına geri yüklenmeden) önce kaç başarısız şifre girişi denemesi yapılabileceğini ayarlayın.
  • Şifrenin ne kadar süreyle geçerli olacağını ayarlayın.
  • Şifre geçmişi uzunluğunu ayarlayın (length, geçmişte depolanan eski şifrelerin sayısını ifade eder). Bu, kullanıcıların bir öğeyi tekrar son n şifreden birini kullanıyor.
  • Cihaz destekliyorsa depolama alanının şifreleneceğini belirtin.
  • Cihazın kilitlenmeden önce geçebilecek maksimum etkin olmayan süreyi ayarlayın.
  • Cihazı hemen kilitleyin.
  • Cihazın verilerini silin (yani fabrika ayarlarını geri yükleyin).
  • Kamerayı devre dışı bırakın.

Şekil 1. Örnek uygulamanın ekran görüntüsü

Cihaz yönetimi uygulaması geliştirme

Sistem yöneticileri, uygulama yazmak için Cihaz Yönetimi API'sini kullanabilir da dahil olmak üzere, uzaktan/yerel cihaz güvenliği politikasının zorunlu kılınmasını gerektirir. Bu bölümde, cihaz yönetimi uygulaması oluşturmayla ilgili adımlar özetlenmiştir.

Manifest oluşturma

Cihaz Yönetimi API'sini kullanmak için uygulamanın manifesto aşağıdakileri içermelidir:

Cihaz Yönetimi örnek manifestinden bir alıntı aşağıda verilmiştir:

<activity android:name=".app.DeviceAdminSample"
            android:label="@string/activity_sample_device_admin">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.SAMPLE_CODE" />
    </intent-filter>
</activity>
<receiver android:name=".app.DeviceAdminSample$DeviceAdminSampleReceiver"
        android:label="@string/sample_device_admin"
        android:description="@string/sample_device_admin_description"
        android:permission="android.permission.BIND_DEVICE_ADMIN">
    <meta-data android:name="android.app.device_admin"
            android:resource="@xml/device_admin_sample" />
    <intent-filter>
        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
    </intent-filter>
</receiver>

Unutmayın:

  • Aşağıdaki özellikler, örnek uygulama için ApiDemos/res/values/strings.xml içinde bulunan dize kaynaklarını ifade eder. Kaynaklar hakkında daha fazla bilgi için Uygulama Kaynakları.
    • android:label="@string/activity_sample_device_admin", kullanıcı tarafından okunabilen bir etiket olması gerekir.
    • android:label="@string/sample_device_admin", bu izin için kullanıcı tarafından okunabilir etiketi bulunmalıdır.
    • android:description="@string/sample_device_admin_description", iznin kullanıcı tarafından okunabilen açıklamasını ifade eder. Betimlemeler genelde daha uzundur ve bilgilendirme amaçlı etiket.
  • android:permission="android.permission.BIND_DEVICE_ADMIN" , yalnızca sistemin alıcıyla etkileşime geçebildiğinden emin olmak için DeviceAdminReceiver alt sınıfının sahip olması gereken bir izindir (hiçbir uygulamaya bu izin verilmez). Bu, diğer uygulamaların cihaz yöneticisi uygulamanızı kötüye kullanmasını önler.
  • android.app.action.DEVICE_ADMIN_ENABLED, bir DeviceAdminReceiver alt sınıfının bir cihazı yönetmesine izin verilmesi için yapması gereken birincil işlemdir. Bu, kullanıcı cihaz yöneticisi uygulamasını etkinleştirdiğinde alıcı olarak ayarlanır. Kodunuz genellikle bunu onEnabled() içinde yönetir. Desteklenmek için alıcının ayrıca diğer uygulamaların da BIND_DEVICE_ADMIN iznini gerektirmesi kötüye kullanamazsınız.
  • Bir kullanıcı, cihaz yönetimi uygulamasını etkinleştirdiğinde alıcıya belirli bir sistemin yayınına yanıt olarak işlem gerçekleştirme izni etkinlikler. Uygun bir etkinlik ortaya çıktığında uygulama bir politika uygulayabilir. Örneğin, Örneğin, kullanıcı politikaya uymayan yeni bir şifre ayarlamaya çalışırsa kullanıcılarınızdan farklı bir şifre seçmesini isteyebilir bir kontrol listesidir.
  • Uygulamanızı yayınladıktan sonra alıcı adını değiştirmeyin. Manifest'teki ad değişirse kullanıcılar uygulamayı güncellediğinde cihaz yöneticisi devre dışı bırakılır. Daha fazla bilgi için <receiver> bölümüne bakın.
  • android:resource="@xml/device_admin_sample". meta verilerde kullanılan güvenlik politikalarını açıklar. Meta veriler, DeviceAdminInfo sınıfı tarafından ayrıştırıldığı şekilde cihaz yöneticisine özel ek bilgiler sağlar. device_admin_sample.xml aralığının içeriği aşağıda verilmiştir:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-policies>
    <limit-password />
    <watch-login />
    <reset-password />
    <force-lock />
    <wipe-data />
    <expire-password />
    <encrypted-storage />
    <disable-camera />
  </uses-policies>
</device-admin>

Cihaz yönetimi uygulamanızı tasarlarken tüm politikaları değil, yalnızca uygulamanızla alakalı olanları eklemeniz gerekir.

Manifest dosyası hakkında daha fazla bilgi edinmek için Android Geliştiricileri Kılavuzu'na bakın.

Kodu uygulama

Device Management API aşağıdaki sınıfları içerir:

DeviceAdminReceiver
Cihaz yönetimi bileşenini uygulamak için temel sınıf. Bu sınıf, sistem tarafından gönderilen ham intent işlemlerini yorumlama konusunda kolaylık sağlar. Cihaz Yönetimi uygulamanız bir DeviceAdminReceiver alt sınıfı içermelidir.
DevicePolicyManager
Bir cihazda zorunlu kılınan politikaları yönetmeye yönelik bir sınıf. Çoğu müşterisinin bu sınıf, kullanıcının erişebileceği bir DeviceAdminReceiver yayınlamış olmalıdır şu anda etkin. DevicePolicyManager, şununla ilgili politikaları yönetiyor: bir veya daha fazla DeviceAdminReceiver örneği
DeviceAdminInfo
Bu sınıf, meta verileri belirtmek için kullanılır bir cihaz yöneticisi bileşeni için kullanılır.

Bu sınıflar, tam işlevli bir cihaz yöneticisi uygulamasının temelini oluşturur. Bu bölümün geri kalanında, cihaz yöneticisi uygulaması yazmak için DeviceAdminReceiver ve DevicePolicyManager API'lerini nasıl kullanacağınız açıklanmaktadır.

DeviceAdminReceiver'ı Alt Sınıflandırma

Cihaz yöneticisi uygulaması oluşturmak için DeviceAdminReceiver sınıfını alt sınıfa ayırmanız gerekir. DeviceAdminReceiver sınıfı belirli etkinlikler tetiklendiğinde tetiklenen bir dizi geri çağırmadan oluşur. meydana gelir.

Örnek uygulama, DeviceAdminReceiver alt sınıfında belirli etkinliklere yanıt olarak yalnızca bir Toast bildirimi gösterir. Örnek:

KotlinJava
class DeviceAdminSample : DeviceAdminReceiver() {

    private fun showToast(context: Context, msg: String) {
        context.getString(R.string.admin_receiver_status, msg).let { status ->
            Toast.makeText(context, status, Toast.LENGTH_SHORT).show()
        }
    }

    override fun onEnabled(context: Context, intent: Intent) =
            showToast(context, context.getString(R.string.admin_receiver_status_enabled))

    override fun onDisableRequested(context: Context, intent: Intent): CharSequence =
            context.getString(R.string.admin_receiver_status_disable_warning)

    override fun onDisabled(context: Context, intent: Intent) =
            showToast(context, context.getString(R.string.admin_receiver_status_disabled))

    override fun onPasswordChanged(context: Context, intent: Intent, userHandle: UserHandle) =
            showToast(context, context.getString(R.string.admin_receiver_status_pw_changed))
...
}
public class DeviceAdminSample extends DeviceAdminReceiver {

    void showToast(Context context, String msg) {
        String status = context.getString(R.string.admin_receiver_status, msg);
        Toast.makeText(context, status, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onEnabled(Context context, Intent intent) {
        showToast(context, context.getString(R.string.admin_receiver_status_enabled));
    }

    @Override
    public CharSequence onDisableRequested(Context context, Intent intent) {
        return context.getString(R.string.admin_receiver_status_disable_warning);
    }

    @Override
    public void onDisabled(Context context, Intent intent) {
        showToast(context, context.getString(R.string.admin_receiver_status_disabled));
    }

    @Override
    public void onPasswordChanged(Context context, Intent intent, UserHandle userHandle) {
        showToast(context, context.getString(R.string.admin_receiver_status_pw_changed));
    }
...
}

Uygulamayı etkinleştirme

Cihaz yöneticisi uygulamasının işlemesi gereken önemli olaylardan biri, kullanıcının uygulamayı etkinleştirmesidir. Politikaların uygulanabilmesi için kullanıcının uygulamayı açıkça etkinleştirmesi gerekir. Kullanıcı uygulamayı etkinleştirmemeyi seçerse uygulama cihazda kalır ancak politikaları uygulanmaz ve kullanıcı uygulamanın avantajlarından hiçbirini elde edemez.

Uygulamayı etkinleştirme işlemi, kullanıcı ACTION_ADD_DEVICE_ADMIN intent'ini tetikleyen bir işlem gerçekleştirdiğinde başlar. Bu durum, kullanıcı Etkinleştir düğmesini Yönetici onay kutusunu işaretleyin.

Kullanıcı Yöneticiyi Etkinleştir onay kutusunu tıkladığında kullanıcının cihaz yönetimi uygulamasını etkinleştirmesini isteyen değişiklikler (şekilde gösterildiği gibi) 2.

Şekil 2. Örnek uygulama: Uygulamayı etkinleştirme

Aşağıda, kullanıcı Yöneticiyi Etkinleştir onay kutusunu tıkladığında çalıştırılan kod verilmiştir. Bu, onPreferenceChange() geri çağırma işlevini tetikler. Bu geri çağırma işlevi, Preference değerinin kullanıcı tarafından değiştirildiği ve ayarlanacağı ve/veya kalıcılaştırılacağı zaman çağrılır. Kullanıcı uygulamayı etkinleştiriyorsa kullanıcının cihaz yönetimi uygulamasını etkinleştirmesini isteyen değişiklikler (şekilde gösterildiği gibi) 2. Aksi takdirde cihaz yönetimi uygulaması devre dışı bırakılır.

KotlinJava
override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
    if (super.onPreferenceChange(preference, newValue)) return true
    val value = newValue as Boolean
    if (preference == enableCheckbox) {
        if (value != adminActive) {
            if (value) {
                // Launch the activity to have the user enable our admin.
                val intent = Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN).apply {
                    putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdminSample)
                    putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
                            activity.getString(R.string.add_admin_extra_app_text))
                }
                startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN)
                // return false - don't update checkbox until we're really active
                return false
            } else {
                dpm.removeActiveAdmin(deviceAdminSample)
                enableDeviceCapabilitiesArea(false)
                adminActive = false
            }
        }
    } else if (preference == disableCameraCheckbox) {
        dpm.setCameraDisabled(deviceAdminSample, value)
    }
    return true
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
    if (super.onPreferenceChange(preference, newValue)) {
        return true;
    }
    boolean value = (Boolean) newValue;
    if (preference == enableCheckbox) {
        if (value != adminActive) {
            if (value) {
                // Launch the activity to have the user enable our admin.
                Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
                intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdminSample);
                intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
                        activity.getString(R.string.add_admin_extra_app_text));
                startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN);
                // return false - don't update checkbox until we're really active
                return false;
            } else {
                dpm.removeActiveAdmin(deviceAdminSample);
                enableDeviceCapabilitiesArea(false);
                adminActive = false;
            }
        }
    } else if (preference == disableCameraCheckbox) {
        dpm.setCameraDisabled(deviceAdminSample, value);
    }
    return true;
}

Çizgi intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample), mDeviceAdminSample (yani bir DeviceAdminReceiver bileşeni) hedef politikadır. Bu satır, Şekil 2'de gösterilen ve kullanıcıları cihaz yöneticisini sisteme ekleyerek (veya reddetmesine izin verebilirsiniz).

Uygulamanın, cihaz yöneticisi uygulamasının etkinleştirilmesini gerektiren bir işlem yapması gerektiğinde uygulamanın etkin olduğunu onaylar. Bunun için DevicePolicyManager yöntemini kullanır isAdminActive(). DevicePolicyManagerisAdminActive() yönteminin bağımsız değişkeni olarak bir DeviceAdminReceiver bileşeni aldığına dikkat edin:

KotlinJava
private lateinit var dpm: DevicePolicyManager
...
private fun isActiveAdmin(): Boolean = dpm.isAdminActive(deviceAdminSample)
DevicePolicyManager dpm;
...
private boolean isActiveAdmin() {
    return dpm.isAdminActive(deviceAdminSample);
}

Politikaları yönetme

DevicePolicyManager, politikaları yönetmek için herkese açık bir sınıftır zorunlu tutulamaz. DevicePolicyManager, bir veya daha fazla DeviceAdminReceiver örneğinin politikalarını yönetir.

DevicePolicyManager için şu şekilde herkese açık kullanıcı adı verilir:

KotlinJava
dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
DevicePolicyManager dpm =
    (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);

Bu bölümde, yönetim görevlerini gerçekleştirmek için DevicePolicyManager'ün nasıl kullanılacağı açıklanmaktadır:

Şifre politikaları belirleme

DevicePolicyManager, cihaz şifre politikasını ayarlama ve uygulama API'lerini içerir. Device Management API'de şifre yalnızca Ekran kilidi. Bu bölümde, şifreyle ilgili yaygın görevler açıklanmaktadır.

Cihaz için şifre ayarlama

Bu kod, kullanıcıdan şifre belirlemesini isteyen bir kullanıcı arayüzü gösterir:

KotlinJava
Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD).also { intent ->
    startActivity(intent)
}
Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
startActivity(intent);
Şifre kalitesini ayarlama

Şifre kalitesi aşağıdaki DevicePolicyManager sabit değerlerinden biri olabilir:

PASSWORD_QUALITY_ALPHABETIC
Kullanıcı bir En az alfabetik (veya diğer semboller) karakter içeren şifre.
PASSWORD_QUALITY_ALPHANUMERIC
Kullanıcı, en az hem sayısal hem alfabetik (veya başka bir sembol) karakter içeren bir şifre girmelidir.
PASSWORD_QUALITY_NUMERIC
Kullanıcı bir şifre girmelidir içeren bir e-posta adresi ekleyin.
PASSWORD_QUALITY_COMPLEX
Kullanıcı en az bir harf, bir rakam ve bir özel simge içeren bir şifre girmelidir.
PASSWORD_QUALITY_SOMETHING
Politika, bir tür şifre gerektirir ancak şifrenin ne olduğu önemli değildir.
PASSWORD_QUALITY_UNSPECIFIED
. Politikada bu şifreyle ilgili herhangi bir gereksinim yoktur.

Örneğin, şifre politikasını alfanümerik şifre gerektirecek şekilde ayarlamak için:

KotlinJava
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
...
dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC);
Şifre içerik gereksinimlerini ayarlama

Android 3.0'tan itibaren DevicePolicyManager sınıfı, şifrenin içeriğinde ince ayar yapmanıza olanak tanıyan yöntemler içerir. Örneğin, şifrelerin en az n büyük harf içermesi gerektiğini belirten bir politika oluşturabilirsiniz. Şifrelerde ince ayar yapma yöntemleri içerik:

Örneğin, bu snippet şifrede en az 2 büyük harf olması gerektiğini belirtir:

KotlinJava
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwMinUppercase = 2
...
dpm.setPasswordMinimumUpperCase(deviceAdminSample, pwMinUppercase)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int pwMinUppercase = 2;
...
dpm.setPasswordMinimumUpperCase(deviceAdminSample, pwMinUppercase);
Minimum şifre uzunluğunu belirleyin

Şifrenin en az belirtilen minimum uzunlukta olması gerektiğini belirtebilirsiniz. Örnek:

KotlinJava
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwLength: Int = ...
...
dpm.setPasswordMinimumLength(deviceAdminSample, pwLength)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int pwLength;
...
dpm.setPasswordMinimumLength(deviceAdminSample, pwLength);
Maksimum hatalı şifre girişi denemesi sayısını ayarlama

Cihazın silinmeden (yani fabrika ayarlarına sıfırlanmadan) önce izin verilen maksimum başarısız şifre deneme sayısını ayarlayabilirsiniz. Örnek:

KotlinJava
val dPM:DevicePolicyManager
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val maxFailedPw: Int = ...
...
dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int maxFailedPw;
 ...
dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw);
Şifre süre sonu zaman aşımını ayarlama

Android 3.0 sürümünden itibaren, setPasswordExpirationTimeout(). şifre süresinin ne zaman dolacağını belirleme yöntemidir. Cihaz yöneticisi geçerlilik sonu zaman aşımını ayarladığı andan itibaren, milisaniye cinsinden delta cinsinden ifade edilir. Örnek:

KotlinJava
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwExpiration: Long = ...
...
dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
long pwExpiration;
...
dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration);
Şifreyi geçmişe göre sınırlayın

Android 3.0'dan itibaren, kullanıcıların eski şifreleri yeniden kullanabilmelerini sınırlamak için setPasswordHistoryLength()yöntemini kullanabilirsiniz. Bu yöntem, kaç eski şifrenin depolandığını belirten bir length parametresi alır. Bu politika etkin olduğunda, kullanıcılar yeni son n şifreyle eşleşen şifre olmalıdır. Bu durum, ve aynı şifreyi tekrar tekrar kullanmasını engeller. Bu politika genellikle kullanıcıları belirli bir süre geçtikten sonra şifrelerini güncellemeye zorlayan setPasswordExpirationTimeout() ile birlikte kullanılır.

Örneğin, bu snippet kullanıcıların son 5 şifrelerinden herhangi birini yeniden kullanmasını yasaklar:

KotlinJava
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwHistoryLength = 5
...
dpm.setPasswordHistoryLength(deviceAdminSample, pwHistoryLength)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int pwHistoryLength = 5;
...
dpm.setPasswordHistoryLength(deviceAdminSample, pwHistoryLength);

Cihaz kilidini ayarlama

Cihaz kilitlenmeden önce kullanıcının etkin olmamasının maksimum süresini ayarlayabilirsiniz. Örnek:

KotlinJava
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val timeMs: Long = 1000L * timeout.text.toString().toLong()
...
dpm.setMaximumTimeToLock(deviceAdminSample, timeMs)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
long timeMs = 1000L*Long.parseLong(timeout.getText().toString());
dpm.setMaximumTimeToLock(deviceAdminSample, timeMs);

Cihazı programatik olarak hemen kilitlemesini de sağlayabilirsiniz:

KotlinJava
private lateinit var dpm: DevicePolicyManager
dpm.lockNow()
DevicePolicyManager dpm;
dpm.lockNow();

Verileri temizleme

Cihazı fabrika ayarlarına sıfırlamak için DevicePolicyManager yönteminiwipeData() kullanabilirsiniz. Bu, cihaz kaybolduğunda veya çalındığında kullanışlıdır. Cihazı silme kararı genelde bir sonucudur. Örneğin, setMaximumFailedPasswordsForWipe() belirtirken cihaz, belirli sayıda başarısız şifre girişiminden sonra temizlenir.

Verileri aşağıdaki şekilde silebilirsiniz:

KotlinJava
private lateinit var dpm: DevicePolicyManager
dpm.wipeData(0)
DevicePolicyManager dpm;
dpm.wipeData(0);

wipeData() yöntemi parametresini, ek seçeneklerin bir bit maskesi olarak ayarlayabilirsiniz. Şu anda değer 0 olmalıdır.

Kamerayı devre dışı bırak

Android 4.0 sürümünden itibaren kamerayı devre dışı bırakabilirsiniz. Bunun kalıcı bir devre dışı bırakma işlemi olması gerekmediğini unutmayın. Kamera, bağlama, zamana ve diğer ölçütlere göre dinamik olarak etkinleştirilebilir/devre dışı bırakılabilir.

Kameranın devre dışı bırakılıp kapatılmayacağını kontrol etmek için setCameraDisabled() yöntemini çağırın. Örneğin, bu snippet, kamerayı bir onay kutusu ayarına göre etkinleştirilecek veya devre dışı bırakacak şekilde ayarlar:

KotlinJava
private lateinit var disableCameraCheckbox: CheckBoxPreference
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
...
dpm.setCameraDisabled(deviceAdminSample, mDisableCameraCheckbox.isChecked)
private CheckBoxPreference disableCameraCheckbox;
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
dpm.setCameraDisabled(deviceAdminSample, mDisableCameraCheckbox.isChecked());

Depolama alanı şifreleme

Android 3.0'dan itibaren, destekleniyorsa depolama alanının şifrelenmesini zorunlu tutan bir politika ayarlamak için setStorageEncryption() yöntemini kullanabilirsiniz.

Örnek:

KotlinJava
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
...
dpm.setStorageEncryption(deviceAdminSample, true)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
dpm.setStorageEncryption(deviceAdminSample, true);

Depolama alanı şifrelemesinin nasıl etkinleştirileceğine ilişkin tam bir örnek için Device Management API örneğine bakın.

Ek kod örnekleri

Android AppRestrictionImplementr ve DeviceOwner değerleridir örnekler, bu sayfada ele alınan API'lerin kullanımını daha ayrıntılı şekilde gösterir.