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 şimdiden hazırlanmaya başlamanızı öneririz. Daha fazla bilgi edinmek ve taşıma seçeneklerini görmek için Cihaz yöneticisi desteğinin sonlandırılması başlıklı makaleyi inceleyin.

Android, Android Cihaz Yönetimi API'sini sunarak kurumsal uygulamalar için destek sunar. Cihaz Yönetimi API'si, sistem düzeyinde cihaz yönetimi özellikleri sunar. 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 cihazlarda alfanümerik şifreler veya sayısal PIN'ler dahil olmak üzere şifre politikalarını zorunlu kılabilir. 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 isterseniz Cihaz Politikası Denetleyici oluşturma başlıklı makaleyi inceleyin.

Gözetimsiz Cihaz Sahibi Modu

Android 14 (API düzeyi 34), Gözetimsiz Sistem Kullanıcı Modu'nu (UserManager.isHeadlessSystemUserMode true döndüren cihazlar) kullanıma sunar. Gözetimsiz Sistem Kullanıcı Modu'nda sistem kullanıcısı arka plan kullanıcısıdır ve son kullanıcı etkileşimi için ek ön plan kullanıcılarına ihtiyaç duyar. 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.

Başsız sistem kullanıcısıyla yapılandırılmış cihazlarda (sistem kullanıcısının arka planda çalıştığı cihazlar), ön plandaki kullanıcıya veya kullanıcılara yalnızca kapsamı genel olan cihaz politikaları (tüm kullanıcılar için geçerli olan politikalar) uygulanır. Ayrıntılar için addUserRestriction bölümünü inceleyin.

Android cihaz üreticileri, source.android.com adresinde yayınlanan kılavuzu inceleyebilir.

Device Administration 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 cihazlarına yükleyeceği cihaz yöneticisi uygulamaları yazmak için Cihaz Yönetimi API'yi kullanırsınız. Cihaz yöneticisi uygulaması, istenen politikaları uygular. İşleyiş şekli:

  • Bir sistem yöneticisi, uzak/yerel cihaz güvenlik politikalarını zorunlu tutan bir cihaz yöneticisi uygulaması yazar. Bu politikalar uygulamaya sabit kodlanmış olabilir veya uygulama, politikaları üçüncü taraf bir sunucudan dinamik olarak alabilir.
  • Uygulama, kullanıcıların cihazlarına yüklenir. Android'de şu anda otomatik temel hazırlama çözümü bulunmamaktadır. Bir sistem yöneticisinin uygulamayı kullanıcılara dağıtma yollarından bazıları şunlardır:
    • Google Play.
    • Başka bir mağazadan yüklemeyi etkinleştirme.
    • Uygulamayı e-posta veya web siteleri gibi diğer yöntemlerle dağıtmak
  • Sistem, kullanıcıdan cihaz yöneticisi uygulamasını etkinleştirmesini ister. Bunun nasıl ve 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 hassas sistemlere ve verilere erişim gibi avantajlar sağlar.

Kullanıcılar cihaz yöneticisi uygulamasını etkinleştirmezse uygulama cihazda kalır ancak etkin durumda olmaz. Kullanıcılar bu politikalara tabi olmaz ve uygulamanın avantajlarından hiçbirini elde edemez (ör. verileri senkronize edemeyebilir).

Bir kullanıcı politikalara uymazsa (ör. yönergeleri ihlal eden bir şifre ayarlarsa) bu durumun nasıl ele alınacağına uygulama karar verir. Ancak bu durum genellikle kullanıcının verileri senkronize edememesine neden olur.

Bir cihaz, Device Administration API'de desteklenmeyen politikalar gerektiren bir sunucuya bağlanmaya çalışırsa bağlantıya izin verilmez. Cihaz Yönetimi API'si şu anda kısmi temel hazırlığa izin vermemektedir. Diğer bir deyişle, belirtilen politikaların tümünü desteklemeyen bir cihazın (ör. eski bir cihaz) bağlanmasına izin verilemez.

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öneticisi uygulamasını kaldırmak için kullanıcıların önce uygulamanın yönetici olarak kaydını iptal etmesi gerekir.

Politikalar

Kurumsal ortamlarda, çalışan cihazlarının genellikle cihazın kullanımını yöneten katı politikalara uyması gerekir. Device Administration 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 istemesini gerektirir.
Minimum şifre uzunluğu Şifre için gereken karakter sayısını ayarlayın. Örneğin, PIN'lerin veya şifrelerin en az altı karakter uzunluğunda olmasını zorunlu tutabilirsiniz.
Alfa-sayısal şifre gerekli Şifrelerin harf ve rakamlardan oluşmasını zorunlu kılar. Sembolik karakterler içerebilir.
Karmaşık şifre gerekli Ş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ı Tüm yöneticiler veya belirli bir yönetici için şifrede bulunması gereken minimum harf sayısı. Android 3.0'ta kullanıma sunulmuştur.
Şifrede minimum küçük harf sayısı Tüm yöneticiler veya belirli bir yönetici için şifrede gereken minimum küçük harf sayısı. Android 3.0'ta kullanıma sunulmuştur.
Ş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'ta kullanıma sunulmuştur.
Şifrede gereken minimum sayısal basamak sayısı Tüm yöneticiler veya belirli bir yönetici için şifrede bulunması gereken minimum sayısal basamak sayısı. Android 3.0'ta kullanıma sunulmuştur.
Şifrede gereken minimum simge sayısı Tüm yöneticiler veya belirli bir yönetici için şifrede gereken minimum sembol sayısı. Android 3.0'ta kullanıma sunulmuştur.
Şifrede gereken minimum büyük harf sayısı Tüm yöneticiler veya belirli bir yönetici için şifrede bulunması gereken minimum büyük harf sayısı. Android 3.0'ta kullanıma sunulmuştur.
Şifre süre sonu zaman aşımı Şifrenin geçerlilik süresinin sona ereceği tarih. Cihaz yöneticisinin geçerlilik süresi zaman aşımını ayarlamasından itibaren milisaniye cinsinden bir delta olarak ifade edilir. Android 3.0'ta kullanıma sunulmuştur.
Şifre geçmişi kısıtlaması Bu politika, kullanıcıların son n benzersiz şifreyi yeniden 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. Android 3.0'ta kullanıma sunulmuştur.
Maksimum hatalı şifre girişi denemesi sayısı Cihazın verilerini silmeden önce kullanıcının kaç kez yanlış şifre girebileceğini belirtir. Cihaz Yönetimi API'si, yöneticilerin cihazı uzaktan fabrika varsayılan ayarlarına sıfırlamasına da olanak tanır. Bu sayede, cihaz kaybolur veya çalınırsa veriler güvende kalır.
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'ta kullanıma sunulmuştur.
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, bağlama, saate vb. göre dinamik olarak etkinleştirilebilir/devre dışı bırakılabilir. Android 4.0'ta kullanıma sunulmuştur.

Diğer özellikler

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

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

Örnek uygulama

Bu sayfada kullanılan örnekler, SDK örneklerine (Android SDK Yöneticisi aracılığıyla kullanılabilir) dahil olan ve sisteminizde <sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java olarak bulunan Device Administration API örneğini temel alır.

Ö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 belirtilen politikalara uygun değilse 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 zaman geçerliliğini yitireceğini ayarlayın.
  • Şifre geçmişi uzunluğunu ayarlayın (length, geçmişte depolanan eski şifrelerin sayısını ifade eder). Bu sayede kullanıcılar, daha önce kullandıkları son n şifreden birini yeniden kullanamaz.
  • 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, uzaktan/yerel cihaz güvenlik politikası yaptırımını uygulayan bir uygulama yazmak için Device Administration API'yi kullanabilir. Bu bölümde, cihaz yönetimi uygulaması oluşturmayla ilgili adımlar özetlenmiştir.

Manifest oluşturma

Device Administration API'yi kullanmak için uygulamanın manifest dosyasında aşağıdakiler bulunmalıdır:

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>

Şunu 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ı başlıklı makaleyi inceleyin.
    • android:label="@string/activity_sample_device_admin", etkinliğin kullanıcı tarafından okunabilen etiketini ifade eder.
    • android:label="@string/sample_device_admin", iznin kullanıcı tarafından okunabilen etiketini ifade eder.
    • android:description="@string/sample_device_admin_description", iznin kullanıcı tarafından okunabilen açıklamasını ifade eder. Açıklama, genellikle etiketten daha uzun ve daha bilgilendiricidir.
  • 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. Desteklenebilmesi için alıcının da BIND_DEVICE_ADMIN iznini alması gerekir. Böylece diğer uygulamalar bu izni kötüye kullanamaz.
  • Kullanıcı cihaz yöneticisi uygulamasını etkinleştirdiğinde alıcı, belirli sistem etkinliklerinin yayınlanmasına yanıt olarak işlem gerçekleştirme izni alır. Uygun bir etkinlik ortaya çıktığında uygulama bir politika uygulayabilir. Örneğin, kullanıcı politika şartlarını karşılamayan yeni bir şifre belirlemeye çalışırsa uygulama, kullanıcıdan şartları karşılayan farklı bir şifre seçmesini isteyebilir.
  • 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ı beyan eder. 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ıyla ilgili daha fazla bilgi için Android Geliştirici Kılavuzu'na bakın.

Kodu uygulama

Cihaz Yönetimi API'si 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 uygulanan politikaları yönetmek için kullanılan sınıf. Bu sınıftaki çoğu istemcinin, kullanıcının şu anda etkinleştirdiği bir DeviceAdminReceiver yayınlamış olması gerekir. DevicePolicyManager, bir veya daha fazla DeviceAdminReceiver örneğinin politikalarını yönetir
DeviceAdminInfo
Bu sınıf, cihaz yöneticisi bileşeni için meta verileri belirtmek amacıyla 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ıfa ayı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 gerçekleştiğinde tetiklenen bir dizi geri çağırma işlevinden oluşur.

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

Kotlin

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))
...
}

Java

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 yararlanamaz.

Uygulamayı etkinleştirme işlemi, kullanıcı ACTION_ADD_DEVICE_ADMIN intent'ini tetikleyen bir işlem gerçekleştirdiğinde başlar. Örnek uygulamada bu durum, kullanıcı Yöneticiyi etkinleştir onay kutusunu tıkladığında gerçekleşir.

Kullanıcı Yöneticiyi Etkinleştir onay kutusunu tıkladığında ekran, kullanıcıdan cihaz yöneticisi uygulamasını etkinleştirmesini isteyen şekilde değişir (Şekil 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 ekran, kullanıcıdan cihaz yöneticisi uygulamasını etkinleştirmesini ister (Şekil 2). Aksi takdirde cihaz yöneticisi uygulaması devre dışı bırakılır.

Kotlin

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
}

Java

@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;
}

intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample) satırı, mDeviceAdminSample'un (DeviceAdminReceiver bileşeni olan) hedef politika olduğunu belirtir. Bu satır, kullanıcıları cihaz yöneticisini sisteme ekleme (veya reddetme) konusunda yönlendiren, Şekil 2'de gösterilen kullanıcı arayüzünü çağırır.

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ırisAdminActive(). DevicePolicyManagerisAdminActive() yönteminin bağımsız değişkeni olarak bir DeviceAdminReceiver bileşeni aldığına dikkat edin:

Kotlin

private lateinit var dpm: DevicePolicyManager
...
private fun isActiveAdmin(): Boolean = dpm.isAdminActive(deviceAdminSample)

Java

DevicePolicyManager dpm;
...
private boolean isActiveAdmin() {
    return dpm.isAdminActive(deviceAdminSample);
}

Politikaları yönetme

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

DevicePolicyManager için bir tutamaç aşağıdaki gibi elde edilir:

Kotlin

dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager

Java

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

Bu bölümde, yönetici 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. Cihaz Yönetimi API'sinde şifre yalnızca ekran kilidi için geçerlidir. 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:

Kotlin

Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD).also { intent ->
    startActivity(intent)
}

Java

Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
startActivity(intent);
Şifre kalitesini ayarlama

Şifre kalitesi aşağıdaki DevicePolicyManager sabitlerinden biri olabilir:

PASSWORD_QUALITY_ALPHABETIC
Kullanıcı, en az bir alfabetik (veya başka bir sembol) karakter içeren bir şifre girmelidir.
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ı en az bir sayısal karakter içeren bir şifre girmelidir.
PASSWORD_QUALITY_COMPLEX
Kullanıcı en az bir harf, bir rakam ve bir özel karakter 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 şifreyle ilgili herhangi bir şart yoktur.

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

Kotlin

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
...
dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC)

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC);
Şifre içeriğiyle ilgili koşulları ayarlama

Android 3.0'dan itibaren DevicePolicyManager sınıfı, şifre 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. Şifre içeriğini hassaslaştırmak için kullanabileceğiniz yöntemler şunlardır:

Örneğin, bu snippet'te şifrede en az 2 büyük harf bulunması gerektiği belirtilmektedir:

Kotlin

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwMinUppercase = 2
...
dpm.setPasswordMinimumUpperCase(deviceAdminSample, pwMinUppercase)

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int pwMinUppercase = 2;
...
dpm.setPasswordMinimumUpperCase(deviceAdminSample, pwMinUppercase);
Minimum şifre uzunluğunu ayarlama

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

Kotlin

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwLength: Int = ...
...
dpm.setPasswordMinimumLength(deviceAdminSample, pwLength)

Java

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:

Kotlin

val dPM:DevicePolicyManager
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val maxFailedPw: Int = ...
...
dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw)

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int maxFailedPw;
 ...
dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw);
Şifre süre sonu zaman aşımını ayarlama

Android 3.0'dan itibaren, bir şifrenizin ne zaman sona ereceğini ayarlamak için setPasswordExpirationTimeout() yöntemini kullanabilirsiniz. Bu yöntem, cihaz yöneticisinin son kullanma zaman aşımını ayarlamasından itibaren milisaniye cinsinden bir delta olarak ifade edilir. Örnek:

Kotlin

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwExpiration: Long = ...
...
dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration)

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
long pwExpiration;
...
dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration);
Şifreyi geçmişe göre kısıtlama

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 etkinken kullanıcılar son n şifreyle eşleşen yeni bir şifre giremez. Bu sayede kullanıcıların aynı şifreyi tekrar tekrar kullanması engellenir. 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:

Kotlin

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

Java

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:

Kotlin

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

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
long timeMs = 1000L*Long.parseLong(timeout.getText().toString());
dpm.setMaximumTimeToLock(deviceAdminSample, timeMs);

Cihazı programatik olarak hemen kilitlemesini de sağlayabilirsiniz:

Kotlin

private lateinit var dpm: DevicePolicyManager
dpm.lockNow()

Java

DevicePolicyManager dpm;
dpm.lockNow();

Verileri temizleme

Cihazı fabrika ayarlarına sıfırlamak için DevicePolicyManager yönteminiwipeData() kullanabilirsiniz. Bu özellik, cihaz kaybolduğunda veya çalındığında kullanışlıdır. Cihazın silinmesine karar verilmesi genellikle belirli koşulların karşılanması sonucunda gerçekleşir. Örneğin, belirli sayıda başarısız şifre giriş denemesinden sonra bir cihazın silinmesi gerektiğini belirtmek için setMaximumFailedPasswordsForWipe() değerini kullanabilirsiniz.

Verileri aşağıdaki şekilde silebilirsiniz:

Kotlin

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

Java

DevicePolicyManager dpm;
dpm.wipeData(0);

wipeData() yöntemi, parametresi olarak ek seçeneklerin bit maskesini alır. Ş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. Bu işlemin kalıcı olarak devre dışı bırakmak anlamına gelmediğini unutmayın. Kamera, bağlama, saate vb. bağlı olarak dinamik olarak etkinleştirilebilir/devre dışı bırakılabilir.

Kameranın devre dışı olup olmadığını setCameraDisabled() yöntemini kullanarak kontrol edersiniz. Örneğin, bu snippet, kamerayı bir onay kutusu ayarına göre etkinleştirecek veya devre dışı bırakacak şekilde ayarlar:

Kotlin

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

Java

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:

Kotlin

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

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
dpm.setStorageEncryption(deviceAdminSample, true);

Depolama alanı şifrelemesinin nasıl etkinleştirileceğine dair eksiksiz bir örnek için Device Administration API örneğine bakın.

Diğer kod örnekleri

Android AppRestrictionEnforcer ve DeviceOwner örnekleri, bu sayfada ele alınan API'lerin kullanımını daha ayrıntılı bir şekilde gösterir.