Cihaz yönetimine genel bakış

Cihaz yöneticisi desteğinin sonlandırılması. Android 9'dan (API düzeyi 28) itibaren, bazı yönetici politikaları bir cihaz yöneticisi tarafından çağrıldığında kullanımdan kaldırılmış olarak işaretlenecektir. Bu değişikliğe hazırlanmaya şimdiden başlamanızı öneririz. Daha fazla bilgi edinmek ve taşıma seçeneklerini görmek için Cihaz yöneticisinin desteğinin sonlandırılması başlıklı makaleyi okuyun.

Android, Android cihaz Yönetimi API'sini sunarak kurumsal uygulamalar için destek sağlar. Device Administration API, sistem düzeyinde cihaz yönetimi özellikleri sunar. Bu API'ler, BT uzmanlarının çalışan cihazları üzerinde kapsamlı kontrol sahibi olması gereken kurumsal ortamlarda faydalı olan, güvenliğe duyarlı 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ı üzerinden cihazlarda alfanümerik şifreler veya sayısal PIN'ler de dahil olmak üzere şifre politikalarını zorunlu kılabilir. Yöneticiler, kaybolan veya çalınan telefonları uzaktan silebilir (yani fabrika varsayılanları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ştiricilere yöneliktir. 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 Work Policy Controller oluşturma hakkında bilgi edinmek istiyorsanız Cihaz Politikası Denetleyici Oluşturma başlıklı makaleyi inceleyin.

Başsız Cihaz Sahibi Modu

Android 14 (API düzeyi 34), gözetimsiz sistem kullanıcı modunu (UserManager.isHeadlessSystemUserMode değerinin true döndürdüğü cihazlar) kullanıma sunar. Gözetimsiz sistem kullanıcı modunda, sistem kullanıcısı bir 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 ayrıca, 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 sunulur.

Başsız sistem kullanıcısıyla yapılandırılmış cihazlarda (sistem kullanıcısının arka planda çalıştığı durumlarda) yalnızca kapsamı genel olan cihaz politikaları (tüm kullanıcılar için geçerli olan politikalar) ön plan kullanıcısına veya kullanıcılarına uygulanır. Ayrıntılar için addUserRestriction sayfasına bakın.

Android cihaz üreticileri, source.android.com adresinde yayınlanan kılavuzdan yararlanabilir.

Cihaz yönetimi API'sine genel bakış

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

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

İşleyiş şekli

Kullanıcıların cihazlarına yüklediği cihaz yöneticisi uygulamalarını yazmak için Device Administration API'yi kullanırsınız. Cihaz yöneticisi uygulaması, istenen politikaları uygular. İşleyiş şekli:

  • Sistem yöneticisi, uzak/yerel cihaz güvenlik politikalarını zorunlu kılan 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ırlık çözümü yoktur. Sistem yöneticisinin uygulamayı kullanıcılara dağıtmak için kullanabileceği yöntemlerden bazıları şunlardır:
    • Google Play.
    • Başka bir mağazadan yüklemeyi etkinleştirme
    • Uygulamayı e-posta veya web siteleri gibi başka yöntemlerle dağıtma
  • 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 olmaz. Kullanıcılar uygulamanın politikalarına tabi olmaz ve uygulamanın avantajlarından (ör. veri senkronizasyonu) yararlanamaz.

Bir kullanıcı politikalara uymazsa (örneğin, kuralları ihlal eden bir şifre belirlerse) 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. Device Administration API şu anda kısmi temel hazırlığa izin vermiyor. Başka bir deyişle, bir cihaz (ör. eski bir cihaz) belirtilen politikaların tümünü desteklemiyorsa cihazın bağlanmasına izin vermenin bir yolu yoktur.

Bir cihazda birden fazla etkin yönetici uygulaması varsa en katı politika uygulanır. Belirli bir yönetici uygulamasını hedeflemenin bir yolu yoktur.

Mevcut bir cihaz yöneticisi uygulamasını kaldırmak için kullanıcıların önce uygulamanın yönetici kaydını iptal etmesi gerekir.

Politikalar

Kurumsal ortamlarda, çalışanların cihazlarının genellikle cihaz kullanımını düzenleyen katı bir dizi politikaya uyması gerekir. Device Administration API, Tablo 1'de listelenen politikaları destekler. Cihaz Yönetimi API'sinin şu anda yalnızca ekran kilidi için şifreleri desteklediğini unutmayın:

Tablo 1. Device Administration API tarafından desteklenen politikalar.

Politika Açıklama
Şifre etkinleştirildi Cihazların PIN veya şifre istemesini zorunlu kılar.
Minimum şifre uzunluğu Şifre için gerekli karakter sayısını ayarlayın. Örneğin, PIN veya şifrelerin en az altı karakterden oluşmasını zorunlu kılabilirsiniz.
Alfa-sayısal şifre gerekli Şifrelerin harf ve rakam kombinasyonundan oluşmasını zorunlu kılar. Sembolik karakterler içerebilirler.
Karmaşık şifre gerekli Şifrelerin en az bir harf, bir rakam ve bir özel simge içermesini zorunlu kılar. Android 3.0'da kullanıma sunulmuştur.
Şifrede bulunması 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'da kullanıma sunulmuştur.
Şifrede bulunması gereken minimum küçük harf sayısı Tüm yöneticiler veya belirli bir yönetici için şifrede bulunması gereken minimum küçük harf sayısı. Android 3.0'da kullanıma sunulmuştur.
Şifrede harf olmayan minimum karakter sayısı Tüm yöneticiler veya belirli bir yönetici için şifrede bulunması gereken minimum harf olmayan karakter sayısı. Android 3.0'da kullanıma sunulmuştur.
Şifrede bulunması gereken minimum rakam sayısı Tüm yöneticiler veya belirli bir yönetici için şifrede bulunması gereken minimum rakam sayısı. Android 3.0'da kullanıma sunulmuştur.
Şifrede bulunması gereken minimum sembol sayısı Tüm yöneticiler veya belirli bir yönetici için şifrede bulunması gereken minimum sembol sayısı. Android 3.0'da kullanıma sunulmuştur.
Şifrede bulunması 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'da kullanıma sunulmuştur.
Şifre geçerlilik süresi Şifrenin geçerlilik süresinin ne zaman sona ereceği, cihaz yöneticisinin geçerlilik süresi zaman aşımını ayarladığı andan itibaren milisaniye cinsinden fark olarak ifade edilir. Android 3.0'da 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 setPasswordExpirationTimeout() ile birlikte kullanılır. Bu politika, kullanıcıları belirli bir süre geçtikten sonra şifrelerini güncellemeye zorlar. Android 3.0'da 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. Device Administration API, 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 olur.
Maksimum işlem yapılmama süresi kilidi Kullanıcının ekrana son dokunmasından veya bir düğmeye basmasından sonra cihazın ekranı kilitlemesine kadar geçecek süreyi belirler. Bu durumda kullanıcıların cihazlarını kullanabilmeleri ve verilere erişebilmeleri için PIN'lerini veya şifrelerini tekrar girmeleri gerekir. Değer 1 ile 60 dakika arasında olabilir.
Depolama alanı şifrelemesini zorunlu kıl Cihaz destekliyorsa depolama alanının şifrelenmesi gerektiğini belirtir. Android 3.0'da kullanıma sunulmuştur.
Kamerayı devre dışı bırak Kameranın devre dışı bırakılması gerektiğini belirtir. Bu devre dışı bırakma işleminin kalıcı olması gerekmez. Kamera; bağlam, zaman vb. ölçütlere göre dinamik olarak etkinleştirilebilir/devre dışı bırakılabilir. Android 4.0'da kullanıma sunulmuştur.

Diğer özellikler

Device Administration API, 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 silme (cihazı fabrika varsayılan ayarlarına geri yükleme)

Örnek uygulama

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

Örnek uygulama, cihaz yöneticisi özelliklerinin 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ı arayüzündeki düğmeleri kullanarak aşağıdakileri yapabilirler:

  • Şifre kalitesini ayarlayın.
  • Kullanıcı şifresi için minimum uzunluk, içermesi gereken minimum sayısal karakter sayısı gibi şartları belirtin.
  • Şifreyi belirleyin. Şifre, belirtilen politikalara uymuyorsa sistem bir hata döndürür.
  • Cihaz silinmeden (yani fabrika ayarlarına geri yüklenmeden) önce kaç kez başarısız şifre girişi denemesi yapılabileceğini ayarlayın.
  • Şifrenin ne kadar süre sonra geçerliliğini yitireceğini ayarlayın.
  • Şifre geçmişi uzunluğunu ayarlayın (uzunluk, geçmişte saklanan eski şifrelerin sayısını ifade eder). Bu, kullanıcıların daha önce kullandıkları son n şifreden birini yeniden kullanmasını engeller.
  • Cihaz destekliyorsa depolama alanının şifrelenmesi gerektiğini belirtin.
  • Cihaz kilitlenmeden önce geçebilecek maksimum işlem yapılmayan süreyi ayarlayın.
  • Cihazın hemen kilitlenmesini sağlayın.
  • Cihazın verilerini silme (fabrika ayarlarına geri yükleme)
  • Kamerayı devre dışı bırakma

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

Cihaz yönetimi uygulaması geliştirme

Sistem yöneticileri, uzak/yerel cihaz güvenlik politikasının uygulanmasını zorunlu kılan bir uygulama yazmak için Device Administration API'yi kullanabilir. Bu bölümde, cihaz yönetimi uygulaması oluşturma adımları özetlenmektedir.

Manifest dosyasını oluşturma

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

Aşağıda, cihaz yönetimi örnek manifestinden bir alıntı 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 dizininde bulunan dize kaynaklarını ifade eder. Kaynaklar hakkında daha fazla bilgi için Uygulama Kaynakları bölümüne bakın.
    • android:label="@string/activity_sample_device_admin", etkinliğin kullanıcı tarafından okunabilir etiketini ifade eder.
    • android:label="@string/sample_device_admin", iznin kullanıcı tarafından okunabilir etiketini ifade eder.
    • android:description="@string/sample_device_admin_description", iznin kullanıcı tarafından okunabilir açıklamasını ifade eder. Açıklama genellikle etiketten daha uzun ve daha bilgilendiricidir.
  • android:permission="android.permission.BIND_DEVICE_ADMIN" , alıcıyla yalnızca sistemin etkileşimde bulunabilmesi için (hiçbir uygulamaya bu izin verilemez) bir DeviceAdminReceiver alt sınıfının sahip olması gereken bir izindir. Bu, diğer uygulamaların cihaz yöneticisi uygulamanızı kötüye kullanmasını önler.
  • android.app.action.DEVICE_ADMIN_ENABLED, bir cihazı yönetmesine izin verilmesi için DeviceAdminReceiver alt sınıfının işlemesi gereken birincil işlemdir. Bu, kullanıcı cihaz yöneticisi uygulamasını etkinleştirdiğinde alıcıya ayarlanır. Kodunuz genellikle bunu onEnabled() içinde işler. Desteklenmesi için alıcının, diğer uygulamaların kötüye kullanamaması amacıyla BIND_DEVICE_ADMIN iznini de istemesi gerekir.
  • Kullanıcı, cihaz yöneticisi uygulamasını etkinleştirdiğinde alıcıya belirli sistem etkinliklerinin yayınlanmasına yanıt olarak işlem yapma izni verilir. Uygun bir etkinlik olduğunda uygulama bir politika uygulayabilir. Örneğin, kullanıcı politika koşullarını karşılamayan yeni bir şifre belirlemeye çalışırsa uygulama, kullanıcıdan koşulları karşılayan farklı bir şifre seçmesini isteyebilir.
  • Uygulamanızı yayınladıktan sonra alıcı adını değiştirmeyin. Manifest dosyasındaki 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 özgü ek bilgiler sağlar. device_admin_sample.xml içeriği:
<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ı eklemeniz gerekmez, yalnızca uygulamanızla alakalı olanları eklemeniz yeterlidir.

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

Kodu uygulama

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

DeviceAdminReceiver
Cihaz yönetimi bileşeni uygulamak için temel sınıf. Bu sınıf, sistem tarafından gönderilen ham intent işlemlerini yorumlamayı kolaylaştırır. Cihaz Yönetimi uygulamanızda bir DeviceAdminReceiver alt sınıfı bulunmalıdır.
DevicePolicyManager
Cihazda uygulanan politikaları yönetmek için kullanılan bir 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ği için politikaları yönetir.
DeviceAdminInfo
Bu sınıf, bir 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önetimi uygulaması için temel 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'ın alt sınıfını oluşturma

Cihaz yöneticisi uygulaması oluşturmak için DeviceAdminReceiver alt sınıfını oluşturmanız gerekir. DeviceAdminReceiver sınıfı, belirli etkinlikler gerçekleştiğinde tetiklenen bir dizi geri çağırmadan oluşur.

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

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 uygulanması için kullanıcının uygulamayı açıkça etkinleştirmesi gerekir. Kullanıcı uygulamayı etkinleştirmemeyi seçerse uygulama cihazda kalmaya devam eder ancak politikaları uygulanmaz ve kullanıcı uygulamanın avantajlarından yararlanamaz.

Uygulamayı etkinleştirme süreci, kullanıcı ACTION_ADD_DEVICE_ADMIN intent'ini tetikleyen bir işlem gerçekleştirdiğinde başlar. Örnek uygulamada bu, 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, Şekil 2'de gösterildiği gibi kullanıcıdan cihaz yöneticisi uygulamasını etkinleştirmesini isteyecek şekilde değişir.

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

Aşağıda, kullanıcı Yöneticiyi Etkinleştir onay kutusunu tıkladığında yürütülen kod verilmiştir. Bu, onPreferenceChange() geri çağırma işlevini tetikler. Bu geri çağırma, bu Preference değeri kullanıcı tarafından değiştirildiğinde ve ayarlanmak ve/veya kalıcı hale getirilmek üzereyken çağrılır. Kullanıcı uygulamayı etkinleştiriyorsa ekran, Şekil 2'de gösterildiği gibi kullanıcıdan cihaz yöneticisi uygulamasını etkinleştirmesini isteyecek şekilde değişir. 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 (bir DeviceAdminReceiver bileşeni) öğesinin hedef politika olduğunu belirtir. Bu satır, Şekil 2'de gösterilen kullanıcı arayüzünü çağırır. Bu arayüz, kullanıcıya cihaz yöneticisini sisteme ekleme konusunda yol gösterir (veya reddetmesine izin verir).

Uygulama, cihaz yöneticisi uygulamasının etkinleştirilmesine bağlı bir işlem gerçekleştirmesi gerektiğinde uygulamanın etkin olduğunu onaylar. Bunun için DevicePolicyManager yöntemini kullanır isAdminActive(). DevicePolicyManager yönteminin isAdminActive(), bağımsız değişken 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 aşağıdaki gibi bir herkese açık kullanıcı adı alırsınız:

Kotlin

dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager

Java

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

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

Şifre politikalarını ayarlama

DevicePolicyManager, cihaz şifre politikasını ayarlamak ve uygulamak için API'ler içerir. Device Administration API'de ş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ından alfabetik (veya başka sembol) karakterler içeren bir şifre girmelidir.
PASSWORD_QUALITY_ALPHANUMERIC
Kullanıcı, en azından hem sayısal hem de alfabetik (veya diğer semboller) karakterler içeren bir şifre girmelidir.
PASSWORD_QUALITY_NUMERIC
Kullanıcı, en az sayısal karakter içeren bir şifre girmelidir.
PASSWORD_QUALITY_COMPLEX
Kullanıcı en az bir harf, bir rakam ve bir özel simge içeren bir şifre girmiş olmalıdır.
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 koşul yoktur.

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

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ği koşullarını ayarlama

Android 3.0'dan itibaren DevicePolicyManager sınıfı, şifre içeriğinde hassas ayarlamalar 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ğinde ince ayar yapmak için kullanabileceğiniz yöntemler şunlardır:

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

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. Örneğin:

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 silinmeden (yani fabrika ayarlarına sıfırlanmadan) önce izin verilen maksimum başarısız şifre denemesi sayısını ayarlayabilirsiniz. Örneğin:

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 geçerlilik süresi zaman aşımını ayarlama

Android 3.0'dan itibaren, bir şifrenin geçerlilik süresinin ne zaman dolacağını ayarlamak için setPasswordExpirationTimeout() yöntemini kullanabilirsiniz. Bu süre, cihaz yöneticisinin geçerlilik süresi zaman aşımını ayarladığı andan itibaren milisaniye cinsinden bir fark olarak ifade edilir. Örneğin:

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ıtla

Android 3.0'dan itibaren, kullanıcıların eski şifreleri yeniden kullanma imkanını sınırlamak için setPasswordHistoryLength() yöntemini kullanabilirsiniz. Bu yöntem, kaç tane eski şifrenin saklanacağını belirten bir length parametresi alır. Bu politika etkin olduğunda kullanıcılar, son n şifreyle eşleşen yeni bir şifre giremez. Bu, kullanıcıların aynı şifreyi tekrar tekrar kullanmasını önler. 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 olmadığı maksimum süreyi ayarlayabilirsiniz. Örneğin:

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);

Cihaza programatik olarak hemen kilitlenmesini de söyleyebilirsiniz:

Kotlin

private lateinit var dpm: DevicePolicyManager
dpm.lockNow()

Java

DevicePolicyManager dpm;
dpm.lockNow();

Veri silme işlemi gerçekleştirme

Cihazı fabrika ayarlarına sıfırlamak için DevicePolicyManager yöntemini wipeData() kullanabilirsiniz. Bu, cihaz kaybolduğunda veya çalındığında kullanışlıdır. Cihazı silme kararı genellikle belirli koşulların karşılanması sonucunda verilir. Örneğin, belirli sayıda başarısız şifre girişi denemesinden sonra cihazın temizlenmesi gerektiğini belirtmek için setMaximumFailedPasswordsForWipe() kullanabilirsiniz.

Verileri şu şekilde silersiniz:

Kotlin

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

Java

DevicePolicyManager dpm;
dpm.wipeData(0);

wipeData() yöntemi, ek seçeneklerin bit maskesini parametre olarak alır. Şu anda değer 0 olmalıdır.

Kamerayı devre dışı bırak

Android 4.0'dan itibaren kamerayı devre dışı bırakabilirsiniz. Bu devre dışı bırakma işleminin kalıcı olması gerekmez. Kamera; bağlam, zaman vb. ölçütlere göre dinamik olarak etkinleştirilebilir veya devre dışı bırakılabilir.

setCameraDisabled() yöntemini kullanarak kameranın devre dışı bırakılıp bırakılmayacağını kontrol edebilirsiniz. Örneğin, bu snippet, kamerayı bir onay kutusu ayarına göre etkinleştirilecek veya devre dışı bırakılacak ş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, desteklenen yerlerde depolama alanının şifrelenmesini zorunlu kılan bir politika ayarlamak için setStorageEncryption() yöntemini kullanabilirsiniz.

Örneğin:

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ı şifrelemenin nasıl etkinleştirileceğine dair eksiksiz bir örnek için Device Administration API örneğine bakın.

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