Cihaz yönetimine genel bakış

Cihaz yöneticisi desteğinin sonlandırılması. Bazı yönetici politikaları, Android 9 (API düzeyi 28) sürümünden itibaren bir cihaz yöneticisi tarafından çağrıldığında "kullanımdan kaldırıldı" olarak işaretlenecektir. Bu değişiklik için ş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ı bölümünü okuyun.

Android, Android Device Management API'yi sunarak kurumsal uygulamaları destekler. Device Management API, sistem düzeyinde cihaz yönetimi özellikleri sağlar. Bu API'ler, BT uzmanlarının çalışan cihazları üzerinde kapsamlı kontrole ihtiyaç duyduğu kurumsal ortamlarda kullanışlı, güvenliğe duyarlı uygulamalar oluşturmanıza olanak tanır. Örneğin, yerleşik Android E-posta uygulaması Exchange desteğini geliştirmek için bu API'lardan yararlanmıştır. Exchange yöneticileri, E-posta uygulamasını kullanarak alfasayısal şifreler veya sayısal PIN'ler de dahil olmak üzere şifre politikalarını cihazlar arasında zorunlu kılabilir. Yöneticiler ayrıca kayıp veya çalınmış telefonları uzaktan silebilir (yani fabrika varsayılan ayarlarını geri yükleyebilir). Exchange kullanıcıları e-postalarını 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 Management API'nin sağladığı çeşitli özellikler ele alınmaktadır.

Not: Android for Work dağıtımları için İş Politikası Denetleyicisi oluşturma hakkında bilgi edinmek üzere Cihaz Politikası Denetleyicisi Oluşturma sayfasına göz atın.

Gözetimsiz Cihaz Sahibi Modu

Android 14 (API düzeyi 34), Gözetimsiz Sistem Kullanıcısı modunu (UserManager.isHeadlessSystemUserMode uygulamasının true değerini döndürdüğü cihazlar) kullanıma sunar. Gözetimsiz Sistem Kullanıcısı modunda sistem kullanıcısı, arka plan kullanıcısıdır ve son kullanıcı etkileşimi için ek ön plan kullanıcısından yararlanır. Android 14, gözetimsiz cihaz sahibi ilişkili modunu da kullanıma sunuyor. Bu mod, Cihaz Sahibi'nin ayarlandığı sistem kullanıcısı dışında ilişkili tüm kullanıcılara bir Profil Sahibi ekler.

Gözetimsiz bir sistem kullanıcısı ile yapılandırılan cihazlarda (sistem kullanıcısının arka planda çalıştığı cihazlarda), ön plan kullanıcısı veya kullanıcılarına yalnızca genel kapsamlı cihaz politikaları (tüm kullanıcılar için geçerli olan politikalar) uygulanır. Ayrıntılı bilgi için addUserRestriction sayfasını inceleyin.

Android cihaz üreticileri source.android.com'da yayınlanan kılavuza bakabilirler.

Device Management API'ye genel bakış

Device Management API'yi kullanabilecek uygulama türlerine ilişkin örnekleri aşağıda bulabilirsiniz:

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

İşleyiş şekli

Kullanıcıların cihazlarına yükledikleri cihaz yönetimi uygulamalarını yazmak için Device Management API'yi kullanırsınız. Cihaz yönetimi uygulaması, istenen politikaları zorunlu kılar. İşleyiş şekli:

  • Bir sistem yöneticisi, uzak/yerel cihaz güvenlik politikalarını zorunlu kılan bir cihaz yönetimi uygulaması yazar. Bu politikalar uygulamaya sabit bir şekilde kodlanabilir 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. Bir sistem yöneticisinin uygulamayı kullanıcılara dağıtabileceği yöntemlerden bazıları şunlardır:
    • Google Play.
    • Başka bir mağazadan yükleme etkinleştiriliyor.
    • Uygulamanın e-posta veya web siteleri gibi diğer yollarla dağıtılması.
  • Sistem, kullanıcıdan cihaz yönetimi uygulamasını etkinleştirmesini ister. Bunun nasıl ve ne zaman gerçekleştiği, uygulamanın nasıl uygulandığına bağlıdır.
  • Kullanıcılar cihaz yönetimi uygulamasını etkinleştirdikten sonra bu uygulamanın politikalarına tabi olurlar. Bu politikalara uymak, genellikle hassas sistemlere ve verilere erişim gibi avantajlar sağlar.

Kullanıcılar cihaz yönetimi uygulamasını etkinleştirmezlerse uygulama etkin olmayan durumda kalır ancak cihazda kalır. Kullanıcılar bu uygulamanın politikalarına tabi olmaz ve bu gibi durumlarda uygulamanın avantajlarından yararlanamazlar (örneğin, verileri senkronize edemeyebilirler).

Bir kullanıcı politikalara uymuyorsa (örneğin, bir kullanıcı yönergeleri ihlal eden bir şifre belirlerse) bunun nasıl ele alınacağına uygulama karar verir. Ancak bu genellikle kullanıcının verileri senkronize edememesine neden olur.

Bir cihaz, Device Management API'de desteklenmeyen politikaları gerektiren bir sunucuya bağlanmaya çalışırsa bağlantıya izin verilmez. Device Management API şu anda kısmi temel hazırlığın yapılmasına izin vermemektedir. Diğer bir deyişle, bir cihaz (örneğin, eski bir cihaz) belirtilen tüm politikaları desteklemiyorsa cihazın bağlanmasına izin vermek mümkün değildir.

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

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

Politikalar

Kurumsal bir ortamda, genellikle çalışanların cihazlarının, cihaz kullanımını yöneten bir dizi katı politikaya uyması gerekir. Device Management API, Tablo 1'de listelenen politikaları destekler. Device Management API'nin şu anda yalnızca ekran kilidi şifrelerini desteklediğini unutmayın:

Tablo 1. Device Management API 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ı belirleyin. Örneğin, PIN veya şifrelerin en az altı karakterden oluşmasını zorunlu tutabilirsiniz.
Alfa-sayısal şifre gerekli Şifrelerde harf ve sayılardan oluşan bir şifre gerekir. Sembolik karakterler içerebilir.
Karmaşık şifre gerekli Şifrelerin en az bir harf, bir rakam ve özel bir simge içermesi gerekir. Android 3.0 sürümünde kullanıma sunuldu.
Şifrede kullanılması gereken minimum harf sayısı Tüm yöneticilerin veya belirli bir yöneticinin şifrede bulunması gereken minimum harf sayısı. Android 3.0 sürümünde kullanıma sunuldu.
Şifrede kullanılması gereken minimum küçük harf sayısı Tüm yöneticiler veya belirli bir yönetici için şifrede kullanılması gereken minimum küçük harf sayısı. Android 3.0 sürümünde kullanıma sunuldu.
Şifrede harf olmayan minimum karakter girilmesi zorunludur Tüm yöneticiler veya belirli bir yönetici için şifrede kullanılması gereken, harf olmayan minimum karakter sayısı. Android 3.0 sürümünde kullanıma sunuldu.
Şifrede kullanılması gereken minimum basamak sayısı Tüm yöneticiler veya belirli bir yönetici için şifrede kullanılması gereken minimum sayısal basamak sayısı. Android 3.0 sürümünde kullanıma sunuldu.
Şifrede kullanılması gereken minimum simge sayısı Tüm yöneticiler veya belirli bir yönetici için şifrede kullanılması gereken minimum simge sayısı. Android 3.0 sürümünde kullanıma sunuldu.
Şifrede kullanılması gereken minimum büyük harf sayısı Tüm yöneticiler veya belirli bir yönetici için şifrede kullanılması gereken minimum büyük harf sayısı. Android 3.0 sürümünde kullanıma sunuldu.
Şifre süre sonu zaman aşımı Şifrenin süresinin dolacağı zaman. Cihaz yöneticisinin süre sonu zaman aşımını ayarlamasından sonra geçen milisaniye cinsinden delta olarak ifade edilir. Android 3.0 sürümünde kullanıma sunuldu.
Şifre geçmişi kısıtlaması Bu politika, kullanıcıların son n benzersiz şifreyi yeniden kullanmasını engeller. Bu politika genellikle setPasswordExpirationTimeout() ile birlikte kullanılır. Bu da belirli bir süre sonra kullanıcıları şifrelerini güncellemeye zorlar. Android 3.0 sürümünde kullanıma sunuldu.
Maksimum başarısız şifre girişi denemesi sayısı Bir kullanıcının, cihaz verilerini temizlemeden önce 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, cihazın kaybolması veya çalınması durumunda verilerin güvenliğini sağlar.
Maksimum etkin olmama süresi kilidi Kullanıcının ekrana son dokunmasından veya bir düğmeye bastıktan sonra cihaz ekranı kilitlemeden önce geçen süreyi ayarlar. Böyle bir durumda, kullanıcıların cihazlarını kullanabilmek ve verilere erişebilmek için PIN 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 sürümünde kullanıma sunuldu.
Kamerayı devre dışı bırakma Kameranın devre dışı bırakılması gerektiğini belirtir. Bunun kalıcı bir devre dışı bırakma işlemi olması gerekmediğini unutmayın. Kamera bağlama, zamana ve benzer bilgilere göre dinamik olarak etkinleştirilebilir/devre dışı bırakılabilir. Android 4.0 sürümünde kullanıma sunuldu.

Diğer özellikler

Device Management API 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 iste.
  • Cihazı hemen kilitleyin.
  • Cihazın verilerini silin (yani cihazı fabrika varsayılan değerlerine geri yükleyin).

Örnek uygulama

Bu sayfada kullanılan örnekler, SDK örneklerine dahil edilen (Android SDK Yöneticisi üzerinden kullanılabilir) ve sisteminizde <sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java olarak bulunan Device Management API örneğine dayanır.

Örnek uygulama, cihaz yöneticisi özelliklerinin bir demosunu sunar. Bu özellik, kullanıcılara cihaz yönetimi uygulamasını etkinleştirmelerine olanak tanıyan bir kullanıcı arayüzü sunar. Kullanıcılar uygulamayı etkinleştirdikten sonra kullanıcı arayüzündeki düğmeleri kullanarak şu işlemleri gerçekleştirebilirler:

  • Şifre kalitesini belirleyin.
  • Kullanıcı şifresi için minimum uzunluk, içermesi gereken minimum sayısal karakter sayısı gibi gereksinimleri 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ç tane başarısız şifre girişi denemesi gerçekleşebileceğini ayarlayın.
  • Şifrenin şu andan itibaren ne kadar süre sonra geçerli olacağını ayarlayın.
  • Şifre geçmişi uzunluğunu ayarlayın (uzunluk, geçmişte depolanan 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 şifrelenmiş olması gerektiğini belirtin.
  • Cihaz kilitlenmeden önce geçebilecek maksimum etkin olmama süresini 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önetim uygulaması geliştirme

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

Manifest dosyası oluşturma

Device Management API'yi kullanmak için uygulama manifesti aşağıdakileri içermelidir:

Cihaz Yönetimi örnek manifestinden bir alıntıyı burada bulabilirsiniz:

<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 uygulamanın ApiDemos/res/values/strings.xml içinde bulunduğu dize kaynaklarını ifade eder. Kaynaklar hakkında daha fazla bilgi edinmek için Uygulama Kaynakları sayfasını inceleyin.
    • android:label="@string/activity_sample_device_admin", etkinliğin kullanıcı tarafından okunabilen etiketini belirtir.
    • android:label="@string/sample_device_admin", izne ait kullanıcı tarafından okunabilen etiketi ifade eder.
    • android:description="@string/sample_device_admin_description", iznin kullanıcı tarafından okunabilen açıklamasını ifade eder. Açıklamalar genellikle etiketten daha uzundur ve daha bilgilendiricidir.
  • android:permission="android.permission.BIND_DEVICE_ADMIN" , alıcıyla yalnızca sistemin etkileşim kurabilmesini sağlamak için DeviceAdminReceiver alt sınıfının sahip olması gereken bir izindir (bu izin hiçbir uygulamaya verilemez). Bu, diğer uygulamaların cihaz yönetimi uygulamanızı kötüye kullanmasını önler.
  • android.app.action.DEVICE_ADMIN_ENABLED, bir cihazı yönetebilmesi için DeviceAdminReceiver alt sınıfının gerçekleştirmesi gereken birincil işlemdir. Kullanıcı, cihaz yönetimi uygulamasını etkinleştirdiğinde bu alıcı olarak ayarlanır. Kodunuz genellikle bu işlemi onEnabled() içinde işler. Bu özelliğin desteklenmesi için alıcının, diğer uygulamaların kötüye kullanamaması için BIND_DEVICE_ADMIN iznini de gerektirmesi gerekir.
  • Bir kullanıcı cihaz yönetimi uygulamasını etkinleştirdiğinde, alıcıya belirli sistem etkinliklerinin yayınlanmasına yanıt olarak işlem gerçekleştirme izni verilir. Uygun olaylar oluştuğunda uygulama bir politika uygulayabilir. Örneğin, kullanıcı politika gereksinimlerini karşılamayan yeni bir şifre belirlemeye çalışırsa uygulama, kullanıcıdan gereksinimleri karşılayan farklı bir şifre seçmesini isteyebilir.
  • Uygulamanızı yayınladıktan sonra alıcı adını değiştirmekten kaçının. 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> bölümüne bakın.
  • android:resource="@xml/device_admin_sample", meta verilerde kullanılan güvenlik politikalarını açıklar. Meta veri, DeviceAdminInfo sınıfı tarafından ayrıştırıldığı üzere 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ı eklemeniz gerekmez, yalnızca uygulamanızla ilgili politikaları eklemeniz gerekir.

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

Kodu uygulama

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

DeviceAdminReceiver
Cihaz yönetim bileşenini uygulamaya yönelik temel sınıf. Bu sınıf, sistem tarafından gönderilen ham intent işlemlerini yorumlamada kolaylık sağlar. Cihaz Yönetimi uygulamanız bir DeviceAdminReceiver alt sınıfı içermelidir.
DevicePolicyManager
Bir cihazda zorunlu kılınan politikaları yönetmeye yönelik bir sınıf. Bu sınıfın çoğu istemcisinin, 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, cihaz yöneticisi bileşeninin meta verilerini belirtmek için kullanılır.

Bu sınıflar, tam işlevli cihaz yönetim uygulaması için temel bilgileri sunar. Bu bölümün geri kalanında, cihaz yönetimi uygulaması yazmak için DeviceAdminReceiver ve DevicePolicyManager API'lerini nasıl kullanacağınız açıklanmaktadır.

DeviceAdminRecipientr Alt Sınıflandırması

Cihaz yönetimi uygulaması oluşturmak için DeviceAdminReceiver alt sınıfını kullanmanı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 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önetimi uygulamasının işlemesi gereken önemli etkinliklerden biri, uygulamayı etkinleştiren kullanıcıdır. 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 yer almaya devam eder, ancak politikaları zorunlu kılınmaz ve kullanıcı uygulamanın avantajlarından yararlanamaz.

Uygulamayı etkinleştirme süreci, kullanıcı ACTION_ADD_DEVICE_ADMIN amacını tetikleyen bir işlem yaptığında başlar. Bu işlem, örnek uygulamada 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 değişir ve kullanıcıdan cihaz yönetimi uygulamasını etkinleştirmesini ister. Şekil 2'de gösterildiği gibi.

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

Aşağıda, kullanıcı Yöneticiyi Etkinleştir onay kutusunu tıkladığında yürütülen kod bulunmaktadır. Bu da onPreferenceChange() geri çağırma işlemini tetikler. Bu geri çağırma, Preference öğesinin değeri kullanıcı tarafından değiştirildiğinde ve ayarlanmak ve/veya kalıcı hale gelmek üzere olduğunda çağrılır. Kullanıcı uygulamayı etkinleştiriyorsa ekran, Şekil 2'de gösterildiği gibi kullanıcıdan cihaz yönetimi uygulamasını etkinleştirmesini isteyecek şekilde değişir. 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;
}

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

Uygulamanın, etkinleştirilmekte olan cihaz yönetimi uygulamasına bağlı bir işlem gerçekleştirmesi gerektiğinde, uygulamanın etkin olduğunu onaylar. Bunun için DevicePolicyManager yöntemi isAdminActive() kullanılır. DevicePolicyManager yönteminin isAdminActive() bir DeviceAdminReceiver bileşenini bağımsız değişken olarak 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 şekilde 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 hizmetinin nasıl kullanılacağı açıklanmaktadır:

Şifre politikaları belirleme

DevicePolicyManager, cihaz şifresi politikasını ayarlamak ve zorunlu kılmak için kullanılan API'leri içerir. Device Management 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 ayarlayın

Bu kod, kullanıcının şifre belirlemesini isteyen bir kullanıcı arayüzünü görüntüler:

Kotlin

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

Java

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

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

PASSWORD_QUALITY_ALPHABETIC
Kullanıcı, en az alfabetik (veya başka bir simge) karakterler içeren bir şifre girmelidir.
PASSWORD_QUALITY_ALPHANUMERIC
Kullanıcı, en az hem sayısal hem de alfabetik (veya başka bir simge) karakterler içeren bir şifre girmelidir.
PASSWORD_QUALITY_NUMERIC
Kullanıcı, en az sayısal karakterler içeren bir şifre girmelidir.
PASSWORD_QUALITY_COMPLEX
Kullanıcı, en az bir harf, rakam ve özel simge içeren bir şifre girmiş olmalıdır.
PASSWORD_QUALITY_SOMETHING
Politika bir tür şifre gerektirse de ne olduğu umursamaz.
PASSWORD_QUALITY_UNSPECIFIED
Politikada şifreyle ilgili herhangi bir şart yoktur.

Örneğin, şifre politikasını alfa-sayısal bir şifre gerektirecek şekilde nasıl ayarlarsınız?

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çerik gereksinimlerini ayarlama

Android 3.0'dan başlayarak DevicePolicyManager sınıfı şifrenin içeriğinde ince ayar yapmanızı sağlayan yöntemler içerir. Örneğin, şifrelerin en az n büyük harf içermesi gerektiğini belirten bir politika belirleyebilirsiniz. Şifre içeriğinde ince ayar yapma yöntemleri şunlardır:

Örneğin, aşağıdaki 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 ayarlayın

Bir ş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 başarısız şifre girme denemesi sayısını belirleyin

Cihaz silinmeden (yani fabrika ayarlarına sıfırlanmadan) önce izin verilen maksimum başarısız şifre girme 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 süre sonu zaman aşımını ayarlama

Android 3.0'dan başlayarak, bir şifrenin süresinin ne zaman dolacağını ayarlamak için setPasswordExpirationTimeout() yöntemini kullanabilirsiniz. Cihaz yöneticisinin süre sonu zaman aşımını ayarlamasından itibaren milisaniye cinsinden 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ıtla

Android 3.0'dan itibaren, kullanıcıların eski şifreleri yeniden kullanabilme durumunu sınırlandırmak için setPasswordHistoryLength() yöntemini kullanabilirsiniz. Bu yöntem, kaç eski şifrenin depolandığını belirten bir length parametresi kullanı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ı engeller. Bu politika genellikle belirli bir süre sonra kullanıcıları şifrelerini güncellemeye zorlayan setPasswordExpirationTimeout() ile birlikte kullanılır.

Örneğin, şu snippet, kullanıcıların son 5 şifrelerinden herhangi birini tekrar kullanmasını engeller:

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 kilidi ayarla

Cihaz kilitlenmeden önce gerçekleşebilecek maksimum kullanıcı işlemsizlik 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);

Ayrıca, programlı bir şekilde cihazın hemen kilitlenmesini de sağlayabilirsiniz:

Kotlin

private lateinit var dpm: DevicePolicyManager
dpm.lockNow()

Java

DevicePolicyManager dpm;
dpm.lockNow();

Veri temizleme işlemi gerçekleştir

Cihazı fabrika ayarlarına sıfırlamak için DevicePolicyManager yöntemini wipeData() kullanabilirsiniz. Bu özellik, cihaz kaybolduğunda veya çalındığında faydalıdır. Genellikle cihazı silme kararı, bazı koşulların yerine getirilmesinin bir sonucudur. Örneğin, bir cihazın belirli sayıda başarısız şifre girişiminden sonra silinmesi 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, parametresi olarak ek seçeneklerin bir bit maskesini alır. Şu anda değer 0 olmalıdır.

Kamerayı devre dışı bırakma

Android 4.0 sürümünden itibaren, kamerayı devre dışı bırakabilirsiniz. Bunun kalıcı bir devre dışı bırakma işlemi olması gerekmediğini unutmayın. Kamera; bağlama, zamana ve benzer bilgilere 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öntemiyle kontrol edebilirsiniz. Örneğin, şu snippet, kamerayı bir onay kutusu ayarına göre etkinleştirilecek 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ı şifrelemesi

Android 3.0'dan itibaren, desteklendiği durumlarda depolama alanının şifrelenmesini gerektiren bir politika belirlemek 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ı şifrelemesinin nasıl etkinleştirileceğine ilişkin tam bir örnek için Device Management API örneğine göz atın.

Ek kod örnekleri

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