Cihaz yönetimine genel bakış

Cihaz yöneticisi desteğinin sonlandırılması. Android 9 (API düzeyi 28) sürümünden itibaren, cihaz yöneticisi tarafından çağrıldığında bazı yönetici politikaları kullanımdan kaldırılmış olarak işaretlenecek. Bu değişikliğe hazırlanmaya şimdi 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ı destekler. Cihaz Yönetimi API'si, sistem düzeyinde cihaz yönetimi özellikleri sağlar. Bu API'ler, BT uzmanlarının çalışan cihazları üzerinde zengin kontrol gerektirdiği kurumsal ayarlarda kullanışlı 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, kayıp veya çalınmış cep telefonlarını uzaktan da silebilir (yani fabrika 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. Android destekli çalışan cihazlarına daha güçlü güvenlik sağlamak için Cihaz Yönetimi API'sinin sunduğu çeşitli özellikler ele alınır.

Not: Android for Work dağıtımları için iş politikası denetleyicisi oluşturma hakkında bilgi edinmek istiyorsanız Cihaz politikası denetleyicisi 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 değerinin true döndürdüğü cihazlar) kullanıma sunuyor. Gözetimsiz Sistem Kullanıcı Modu'nda 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 bağlıdır. Android 14'te ayrıca gözetimsiz cihaz sahibiyle ilişkili mod da kullanıma sunuluyor. Bu mod, cihaz sahibinin ayarlandığı sistem kullanıcısı dışındaki tüm ilişkili kullanıcılara bir profil sahibi ekler.

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

Android cihaz üreticileri, source.android.com'da yayınlanan rehberden yararlanabilir.

Device Administration API'ye 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ı zorunlu kılar. İşleyiş şekli:

  • Bir sistem yöneticisi, uzaktan/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 getirebilir.
  • Uygulama, kullanıcıların cihazlarına yüklenir. Android'de şu anda otomatik hazırlama çözümü bulunmamaktadır. 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 yollarla dağıtmak
  • Sistem, kullanıcıdan cihaz yöneticisi uygulamasını etkinleştirmesini ister. Bunun nasıl ve ne zaman olacağı, uygulamanın nasıl uygulandığına bağlıdır.
  • Kullanıcılar cihaz yöneticisi uygulamasını etkinleştirdikten sonra bu uygulamanın politikalarına tabi olurlar. Bu politikalara uyulması 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 devre dışı durumda olur. Kullanıcılar bu uygulamanın politikalarına tabi olmaz ve uygulamanın avantajlarından (ör. verileri senkronize etme) yararlanamaz.

Bir kullanıcı politikaları ihlal ederse (örneğin, yönergeleri ihlal eden bir şifre belirlerse) bu durumu nasıl ele alacağına uygulama karar verir. Ancak bu durum genellikle kullanıcının verileri senkronize edememesine neden olur.

Bir cihaz, Cihaz Yönetimi API'sinde desteklenmeyen politikalar gerektiren bir sunucuya bağlanmaya çalışırsa bağlantıya izin verilmez. Cihaz Yönetimi API'si şu anda kısmi hazırlamaya izin vermemektedir. Başka bir deyişle, bir cihaz (örneğin, 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 yolu yoktur.

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

Politikalar

Kurumsal ortamlarda, çalışan cihazlarının genellikle cihaz kullanımını yöneten katı bir politika kümesine uyması gerekir. Cihaz Yönetimi API'si, 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'lerin veya şifrelerin en az altı karakterden oluşmasını zorunlu kılabilirsiniz.
Alfa-sayısal şifre gerekli Şifrelerin harf ve rakam kombinasyonu içermesini gerektirir. Sembolik karakterler içerebilirler.
Karmaşık şifre zorunlu Şifrelerin en az bir harf, bir rakam ve bir özel sembol 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 kullanılması zorunlu olan 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 kullanılması zorunlu olan minimum küçük harf sayısı. Android 3.0'da kullanıma sunulmuştur.
Şifrede bulunması gereken minimum harf olmayan karakter sayısı Tüm yöneticiler veya belirli bir yönetici için şifrede kullanılması zorunlu olan minimum harf dışı karakter sayısı. Android 3.0'da kullanıma sunulmuştur.
Şifrede bulunması gereken minimum sayısal basamak sayısı Tüm yöneticiler veya belirli bir yönetici için şifrede kullanılması zorunlu olan 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 kullanılması zorunlu olan 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 süre sonu zaman aşımı Şifrenin ne zaman sona ereceği, cihaz yöneticisinin geçerlilik süresi zaman aşımını ayarladığı zamandan itibaren milisaniye cinsinden 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ı Kullanıcının, cihaz verilerini silmeden önce 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, cihazın kaybolması veya çalınması durumunda verilerin güvenliğini sağlar.
Maksimum işlemsizlik süresi kilidi Kullanıcının ekrana son dokunmasından veya bir düğmeye son basmasından sonra cihazın ekranı kilitleyeceği süreyi ayarlar. 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 ş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. Bunun kalıcı bir devre dışı bırakma işlemi olması gerekmez. Kamera, bağlama, zamana vb. göre dinamik olarak etkinleştirilebilir/devre dışı bırakılabilir. Android 4.0'da 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 da olanak tanır:

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

Örnek uygulama

Bu sayfada kullanılan örnekler, SDK örneklerinde (Android SDK Manager aracılığıyla kullanılabilir) yer alan ve sisteminizde <sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java olarak bulunan Cihaz Yönetimi API'si örneğine dayanmaktadı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 şunları yapabilirler:

  • Şifre kalitesini ayarlayın.
  • Kullanıcı şifresiyle ilgili minimum uzunluk ve içermesi gereken minimum sayısal karakter sayısı gibi şartları belirtin.
  • Şifreyi ayarlayın. Şifre, belirtilen politikalara uymuyorsa sistem 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üre sonra geçerliliğini yitireceğini ayarlayın.
  • Şifre geçmişi uzunluğunu ayarlayın (uzunluk, geçmişte depolanan eski şifrelerin sayısını ifade eder). Bu ayar, kullanıcıların daha önce kullandıkları son n şifreden birini tekrar kullanmasını engeller.
  • Cihaz destekliyorsa depolama alanının şifrelenmesi gerektiğini belirtin.
  • Cihazın kilitlenmesinden önce geçebilecek maksimum etkin olmayan süreyi ayarlayın.
  • Cihazın hemen kilitlenmesini sağlayın.
  • Cihazdaki verileri silin (yani fabrika ayarlarına geri yükleyin).
  • Kamerayı devre dışı bırakın.

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

Cihaz yönetimi uygulaması geliştirme

Sistem yöneticileri, uzaktan/yerel cihaz güvenlik politikası zorunluluğunu uygulayan bir uygulama yazmak için Cihaz Yönetimi API'sini 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 uygulamada 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 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" , yalnızca sistemin alıcıyla etkileşime girebilmesini sağlamak için DeviceAdminReceiver alt sınıfının sahip olması gereken bir izindir (hiçbir uygulamaya bu izin verilemez). Bu, diğer uygulamaların cihaz yönetimi uygulamanızı kötüye kullanmasını engeller.
  • android.app.action.DEVICE_ADMIN_ENABLED, bir DeviceAdminReceiver alt sınıfının cihaz yönetmesine izin verilmesi için 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. Alıcının da desteklenmesi için diğer uygulamaların kötüye kullanmaması amacıyla BIND_DEVICE_ADMIN iznini istemesi gerekir.
  • Bir 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 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. Manifestteki 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> başlıklı makaleyi inceleyin.
  • 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ığı şekliyle cihaz yöneticisine özel 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ı 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şeni uygulamak için temel sınıf. Bu sınıf, sistem tarafından gönderilen ham amaç işlemlerinin yorumlanmasını kolaylaştırır. 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, bir cihaz yöneticisi bileşeninin meta verilerini belirtmek için kullanılır.

Bu sınıflar, tam işlevli bir cihaz yönetimi 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.

Subclassing DeviceAdminReceiver

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

Bir cihaz yöneticisi uygulamasının ele alması gereken önemli etkinliklerden 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ı zorunlu kılınmaz ve kullanıcı uygulamanın avantajlarından yararlanamaz.

Uygulamanın etkinleştirilmesi işlemi, kullanıcının ACTION_ADD_DEVICE_ADMIN amacını tetikleyen bir işlem yapmasıyla 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, Şekil 2'de gösterildiği gibi kullanıcıyı cihaz yöneticisi uygulamasını etkinleştirmeye yönlendirecek ş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 çalıştırılan kod yer almaktadır. Bu, onPreferenceChange() geri çağırmasını tetikler. Bu geri çağırma, bu Preference değerinin kullanıcı tarafından değiştirilmesi ve ayarlanmak üzere olması ve/veya kalıcı hale getirilmesi durumunda çağrılır. Kullanıcı uygulamayı etkinleştiriyorsa ekranda, kullanıcıdan cihaz yöneticisi uygulamasını etkinleştirmesini isteyen bir istem gösterilir (Şekil 2'de gösterildiği gibi). Aksi takdirde, cihaz yönetimi 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;
}

Satırda, intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample) mDeviceAdminSample (DeviceAdminReceiver bileşeni) hedef politikanın olduğunu belirtir. Bu satır, Şekil 2'de gösterilen kullanıcı arayüzünü çağırır. Bu arayüz, kullanıcılara cihaz yöneticisini sisteme ekleme konusunda yol gösterir (veya eklemeyi reddetmelerine olanak tanır).

Uygulamanın, cihaz yöneticisi uygulamasının etkinleştirilmesine bağlı bir işlem yapması gerektiğinde uygulamanın etkin olduğunu onaylar. Bunu yapmak için DevicePolicyManager yöntemini isAdminActive() kullanır. DevicePolicyManager Yöntemin isAdminActive() bağımsız değişken olarak DeviceAdminReceiver bileşenini aldığını unutmayın:

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 şu şekilde bir tanıtıcı 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, DevicePolicyManager kullanarak nasıl yönetim görevleri gerçekleştireceğiniz açıklanmaktadır:

Şifre politikalarını ayarlama

DevicePolicyManager, cihaz şifre politikasını ayarlama ve zorunlu kılma 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 belirleme

Bu kod, kullanıcıya ş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 alfabetik (veya başka bir sembol) karakter içeren bir şifre girmelidir.
PASSWORD_QUALITY_ALPHANUMERIC
Kullanıcı, en az hem sayısal hem de alfabetik (veya başka bir sembol) karakter 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ğuyla ilgilenmez.
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 adımları uygulayabilirsiniz:

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ğini hassas bir şekilde ayarlamanı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 ayarlayabilirsiniz. Şifre içeriğine ince ayar yapma yöntemleri şunlardır:

Örneğin, bu snippet'te şifrenin en az 2 büyük harf içermesi gerektiği belirtiliyor:

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ın silinmesinden (yani fabrika ayarlarına sıfırlanmasından) ö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, şifrenin ne zaman sona ereceğini ayarlamak için setPasswordExpirationTimeout() yöntemini kullanabilirsiniz. Bu yöntem, cihaz yöneticisinin geçerlilik süresi zaman aşımını ayarladığı andan itibaren milisaniye cinsinden bir delta 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ıtlama

Android 3.0'dan itibaren, kullanıcıların eski şifreleri yeniden kullanma özelliğini sınırlamak için setPasswordHistoryLength() yöntemini kullanabilirsiniz. Bu yöntem, kaç tane eski şifrenin saklanacağını belirten bir uzunluk parametresi alır. Bu politika etkin olduğunda kullanıcılar, son n şifreyle eşleşen yeni bir şifre giremez. Bu sayede kullanıcıların aynı şifreyi tekrar tekrar kullanması önlenir. Bu politika genellikle setPasswordExpirationTimeout() ile birlikte kullanılır. Bu politika, belirli bir süre geçtikten sonra kullanıcıları şifrelerini güncellemeye zorlar.

Örneğin, bu snippet kullanıcıların son 5 şifresinden 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ın kilitlenmesinden önce gerçekleşebilecek maksimum kullanıcı etkinliği dışı kalma süresini 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);

Cihazın hemen kilitlenmesini programatik olarak da 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öntemini wipeData() kullanabilirsiniz. Bu özellik, 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 denemesinden sonra bir cihazın silinmesi gerektiğini belirtmek için setMaximumFailedPasswordsForWipe() kullanabilirsiniz.

Verileri aşağıdaki şekilde silersiniz:

Kotlin

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

Java

DevicePolicyManager dpm;
dpm.wipeData(0);

wipeData() yöntemi, parametre olarak ek seçeneklerin bit maskesini 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. Bunun kalıcı bir devre dışı bırakma işlemi olması gerekmediğini unutmayın. Kamera, bağlama, zamana vb. göre dinamik olarak etkinleştirilebilir/devre dışı bırakılabilir.

Kameranın devre dışı bırakılıp bırakılmayacağını setCameraDisabled() yöntemini kullanarak kontrol edebilirsiniz. Örneğin, bu snippet, kameranın etkinleştirilmesini veya devre dışı bırakılmasını bir onay kutusu ayarına göre belirler:

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 gerektiren 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 şifrelemesinin nasıl etkinleştirileceğine dair eksiksiz bir örnek için Cihaz Yönetimi API'si ö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.