Cihaz yönetimine genel bakış

Cihaz yöneticisi desteğinin sonlandırılması. Android 9 (API düzeyi 28) sürümünden itibaren, bir cihaz yöneticisi tarafından çağrıldığında bazı yönetici politikaları desteği sonlandırıldı olarak işaretlenecek. Bu değişikliğe hemen hazırlanmaya 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 Device Management API'yi sunarak kurumsal uygulamaları destekler. Device Management API, sistem düzeyinde cihaz yönetimi özellikleri sunar. Bu API'ler, BT uzmanlarının çalışan cihazları üzerinde kapsamlı denetime ihtiyaç duyduğu 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 faydalanmıştır. Exchange yöneticileri, E-posta uygulaması aracılığıyla cihazlarda alfanümerik şifreler veya sayısal PIN'ler dahil olmak üzere şifre politikalarını zorunlu kılabilir. Yöneticiler ayrıca kaybolan veya çalınan telefonları uzaktan silebilir (yani fabrika varsayılanlarını geri yükleyebilirler). 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. Bu makalede, Android tarafından desteklenen çalışan cihazlarında daha güçlü güvenlik sağlamak için Device Management API tarafından sağlanan çeşitli özellikler ele alınmaktadır.

Not Android for Work dağıtımları için İş Politikası Denetleyicisi oluşturma hakkında bilgi edinmek için Cihaz Politikası Denetleyicisi Oluşturma bölümüne göz atın.

Gözetimsiz Cihaz Sahibi Modu

Android 14'te (API düzeyi 34), Gözetimsiz Sistem Kullanıcısı modunu (UserManager.isHeadlessSystemUserMode tarafından true döndüren cihazlar) kullanıma sunulmuştur. 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ılarına ihtiyaç duyar. Android 14'te gözetimsiz cihaz sahibiyle ilişkilendirilmiş modu da kullanıma sunuluyor. Bu mod, Cihaz Sahibi'nin ayarlandığı sistem kullanıcısı dışındaki tüm ilişkili kullanıcılara Profil Sahibi ekler.

Gözetimsiz bir sistem kullanıcısı ile yapılandırılan (sistem kullanıcısının arka planda çalıştığı) cihazlarda yalnızca genel kapsamdaki 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ını inceleyin.

Android cihaz üreticileri, source.android.com'da yayınlanan rehberliğe başvurabilir.

Device management API'ye genel bakış

Cihaz Yönetimi API'sini kullanabilecek uygulama türlerine ait örnekleri aşağıda bulabilirsiniz:

  • E-posta istemcileri
  • Uzaktan silme özelliğine sahip güvenlik uygulamaları.
  • Cihaz yönetimi hizmetleri ve uygulamaları.

İşleyiş şekli

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

  • Bir sistem yöneticisi, uzaktan/yerel cihaz güvenlik politikalarını zorunlu kılan bir cihaz yönetimi uygulaması yazar. Bu politikalar uygulamaya sabit kodla gömülebilir veya uygulama, politikaları bir üçüncü taraf sunucusundan dinamik olarak alabilir.
  • Uygulama, kullanıcıların cihazlarında yüklü olmalıdır. Android'de şu anda otomatik bir temel hazırlık çözümü yoktur. Bir sistem yöneticisinin uygulamayı kullanıcılara dağıtma yollarından bazıları şunlardır:
    • Google Play.
    • Başka bir mağazadan yükleme etkinleştiriliyor.
    • Uygulamayı e-posta veya web siteleri gibi başka yollarla dağıtmak.
  • Sistem, kullanıcıdan cihaz yönetimi 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önetimi uygulamasını etkinleştirdikten sonra 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ştirmezse uygulama etkin olmayan bir şekilde cihazda kalır. Kullanıcılar, uygulamanın politikalarına tabi olmaz. Ayrıca, uygulamanın hiçbir avantajından yararlanamaz. Örneğin, verileri senkronize edemeyebilirler.

Bir kullanıcı politikalara uymuyorsa (örneğin, kullanıcı kuralları ihlal eden bir şifre belirlerse) bunun nasıl ele alınacağına karar vermek uygulamaya bağlıdır. Ancak bu durum genellikle kullanıcının verileri senkronize edememesine neden olur.

Bir cihaz, Device Management API'de desteklenmeyen politikaların gerekli olduğu 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. Başka bir deyişle, bir cihaz (örneğin, eski bir cihaz) belirtilen tüm politikaları desteklemiyorsa cihazın bağlanmasına izin verilemez.

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

Mevcut bir cihaz yö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 ortamlarda genellikle çalışan cihazlarının, cihazın kullanımını yöneten katı politikalara uyması gerekir. Device Management API Tablo 1'de listelenen politikaları destekler. Device Management API'nin şu anda yalnızca ekran kilidi için şifreleri desteklediğini unutmayın:

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

Politika Açıklama
Şifre etkinleştirildi Cihazların PIN veya şifre istemesi gerekir.
Minimum şifre uzunluğu Şifre için gerekli karakter sayısını belirleyin. Örneğin, PIN veya şifrelerin en az altı karakterden oluşmasını zorunlu kılabilirsiniz.
Alfa-sayısal şifre gerekli Şifrelerin harf ve sayılardan oluşmasını gerektirir. Sembolik karakterler içerebilirler.
Karmaşık şifre gerekiyor Şifrelerde en az bir harf, bir rakam ve bir özel simge bulunması gerekir. Android 3.0 sürümünde kullanıma sunuldu.
Şifrede kullanılması gereken minimum harf sayısı Tüm yöneticiler veya belirli bir yönetici için şifrede kullanılması gereken minimum harf sayısı. Android 3.0 sürümünde kullanıma sunuldu.
Şifrede 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 olması gerekir 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 sayısal basamak sayısı Tüm yöneticiler veya belirli bir yönetici için şifrede kullanılması gereken minimum sayısal basamak sayısı. Android 3.0 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 geçerlilik bitiş zaman aşımını belirlediği andan itibaren milisaniye cinsinden delta cinsinden ifade edilir. Android 3.0 sürümünde kullanıma sunuldu.
Şifre geçmişi kısıtlaması Bu politika, kullanıcıların son n benzersiz şifreyi yeniden kullanmasını engeller. Bu politika genellikle belirli bir süre geçtikten sonra kullanıcıların şifrelerini güncellemelerine zorlayan setPasswordExpirationTimeout() ile birlikte kullanılır. Android 3.0 sürümünde kullanıma sunuldu.
Maksimum başarısız şifre denemesi sayısı Cihaz verileri temizlemeden önce kullanıcının şifreyi kaç kez yanlış girebileceğini belirtir. Device Management API, yöneticilerin cihazı uzaktan fabrika varsayılan ayarlarına sıfırlamasına da olanak tanır. Bu sayede, cihazın kaybolması veya çalınması halinde verilerin güvenliği sağlanır.
Maksimum işlemsizlik süresi kilidi Kullanıcının ekrana son dokunmasından veya bir düğmeye basmasından bu yana geçen süreyi, cihazın ekranı kilitlemeden önce geçecek süreyi ayarlar. Böyle bir durumda, kullanıcıların cihazlarını kullanmadan ve verilere erişmeden önce PIN'lerini veya şifrelerini tekrar girmeleri gerekir. Değer 1 ile 60 dakika arasında olabilir.
Depolama alanı şifrelemesi gerektir Cihaz destekliyorsa, depolama alanının şifrelenmesi gerektiğini belirtir. Android 3.0 sürümünde kullanıma sunuldu.
Kamerayı devre dışı bırak Kameranın devre dışı bırakılması gerektiğini belirtir. Bunun kalıcı bir devre dışı bırakma işlemi gerekmediğini unutmayın. Kamera, bağlama, zamana ve başka ölçütlere 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 isteyin.
  • Cihazı hemen kilitleyin.
  • Cihazdaki verileri temizleyin (yani, cihazı fabrika varsayılan ayarlarına geri yükleyin).

Örnek uygulama

Bu sayfada kullanılan örnekler, SDK örneklerinde yer alan (Android SDK Manager üzerinden edinilebilir) ve sisteminizde <sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java olarak bulunan Device Management API örneğine dayalıdır.

Örnek uygulama, cihaz yöneticisi özelliklerinin demosunu sunmaktadır. Kullanıcılara cihaz yönetimi uygulamasını etkinleştirebilecekleri bir kullanıcı arayüzü sunar. Kullanıcılar uygulamayı etkinleştirdikten sonra aşağıdakileri yapmak için kullanıcı arayüzündeki düğmeleri kullanabilir:

  • Şifre kalitesini ayarlayın.
  • Kullanıcı şifresiyle ilgili minimum uzunluk, içermesi gereken minimum sayısal karakter sayısı vb. gibi gereksinimleri belirtin.
  • Şifreyi belirleyin. Şifre, belirtilen politikalara uygun değilse sistem bir hata döndürür.
  • Cihaz silinmeden (yani fabrika ayarlarına geri yüklenmeden) önce kaç tane başarısız şifre denemesinin gerçekleşebileceğini ayarlayın.
  • Şifrenin ne kadar süreyle geçerli olacağını ayarlayın.
  • Şifre geçmişi uzunluğunu ayarlayın (uzunluk, geçmişte depolanan eski şifrelerin sayısını belirtir). 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 etkin olmayan süreyi ayarlayın.
  • Cihazı hemen kilitleyin.
  • Cihazdaki verileri temizleyin (yani, fabrika ayarlarını geri yükleyin).
  • Kamerayı devre dışı bırakın.

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

Cihaz yönetimi uygulaması geliştirme

Sistem yöneticileri, cihaz yönetimi API'sini uzaktan/yerel cihaz güvenliği politikasının zorunlu kılınmasını zorunlu kılan bir uygulama yazmak için kullanabilir. Bu bölümde, bir cihaz yönetimi uygulaması oluşturmayla ilgili adımlar özetlenmektedir.

Manifest'i oluşturma

Device Management API'yi kullanmak için uygulamanın manifesti şunları içermelidir:

Cihaz Yönetimi örnek manifestinden bir alıntıyı aşağıda 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 uygulama için ApiDemos/res/values/strings.xml içinde bulunan dize kaynaklarını ifade eder. Kaynaklar hakkında daha fazla bilgi için Uygulama Kaynakları'nı inceleyin.
    • android:label="@string/activity_sample_device_admin", etkinliğin kullanıcı tarafından okunabilen etiketini ifade eder.
    • android:label="@string/sample_device_admin", iznin kullanıcı tarafından okunabilen etiketini ifade eder.
    • android:description="@string/sample_device_admin_description", iznin kullanıcı tarafından okunabilen açıklamasını ifade eder. Betimlemeler genellikle bir etiketten daha uzun ve daha bilgilendiricidir.
  • android:permission="android.permission.BIND_DEVICE_ADMIN" , yalnızca sistemin alıcıyla 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ı engeller.
  • android.app.action.DEVICE_ADMIN_ENABLED, bir cihazı yönetme izni verilebilmesi için DeviceAdminReceiver alt sınıfının işlemesi gereken birincil işlemdir. Kullanıcı, cihaz yönetimi uygulamasını etkinleştirdiğinde bu alıcı olarak ayarlanır. Kodunuz genellikle onEnabled() içinde işlenir. Alıcının desteklenmesi için BIND_DEVICE_ADMIN iznini de zorunlu kılması gerekir. Böylece diğer uygulamalar bu izni kötüye kullanamaz.
  • 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 yapma izni verilir. Uygun bir olay ortaya çıktığında uygulama bir politika uygulayabilir. Örneğin, kullanıcı politika gereksinimlerini karşılamayan yeni bir şifre ayarlamaya ç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ş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 edinmek için <receiver> adresine bakın.
  • android:resource="@xml/device_admin_sample", meta verilerde kullanılan güvenlik politikalarını tanımlar. Meta veriler, DeviceAdminInfo sınıfı tarafından ayrıştırıldığı şekilde, cihaz yöneticisine özel ek bilgiler sağlar. device_admin_sample.xml 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 ilgili politikaları eklemeniz gerekir.

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

Kodu uygulama

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

DeviceAdminReceiver
Cihaz yönetimi bileşeni uygulamak için temel sınıf. Bu sınıf, sistem tarafından gönderilen ham intent işlemlerini yorumlamak için 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 istemcisi, kullanıcının etkinleştirdiği bir DeviceAdminReceiver yayınlamış olmalıdır. DevicePolicyManager, bir veya daha fazla DeviceAdminReceiver örneğinin politikalarını 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 bilgileri sağlamaktadır. 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.

DeviceAdminReceiver'ı Alt Sınıflandırma

Cihaz yönetimi uygulaması oluşturmak için DeviceAdminReceiver alt sınıfını kullanmanız gerekir. DeviceAdminReceiver sınıfı, belirli bir etkinlik 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örüntüler. Örnek:

Kotlin

class DeviceAdminSample : DeviceAdminReceiver() {

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

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

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

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

    override fun onPasswordChanged(context: Context, intent: Intent, userHandle: UserHandle) =
            showToast(context, context.getString(R.string.admin_receiver_status_pw_changed))
...
}

Java

public class DeviceAdminSample extends DeviceAdminReceiver {

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

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

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

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

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

Uygulamayı etkinleştirme

Bir cihaz yönetimi uygulamasının işlemesi gereken önemli etkinliklerden biri, uygulamayı etkinleştirmesidir. Politikaların zorunlu kılınması 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ın uygulanması zorunlu kılınmaz ve kullanıcı, uygulamanın hiçbir avantajından yararlanamaz.

Uygulamayı etkinleştirme süreci, kullanıcı ACTION_ADD_DEVICE_ADMIN amacını tetikleyen bir işlem gerçekleştirdiğinde başlar. Örnek uygulamada bu durum, kullanıcı Yöneticiyi Etkinleştir onay kutusunu tıkladığında gerçekleşir.

Kullanıcı Yöneticiyi Etkinleştir onay kutusunu tıkladığında ekran, şekil 2'de gösterildiği gibi kullanıcıdan cihaz yönetimi 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ülecek kod verilmiştir. Bu, onPreferenceChange() geri çağırmasını tetikleyecektir. Bu geri çağırma, Preference değeri kullanıcı tarafından değiştirildiğinde ve ayarlanmak ve/veya devam etmek ü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ında mDeviceAdminSample (bir DeviceAdminReceiver bileşenidir) hedef politika olduğu belirtilir. Bu satır, Şekil 2'de gösterilen kullanıcı arayüzünü çağırır. Bu arayüz, kullanıcıları cihaz yöneticisini sisteme ekleme konusunda yönlendirir (veya reddetmesine izin verir).

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

Kotlin

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

Java

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

Politikaları yönetme

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

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

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 özelliğinin nasıl kullanılacağı açıklanmaktadır:

Şifre politikaları ayarlama

DevicePolicyManager, cihaz şifresi politikasını ayarlamak ve zorunlu kılmak için API'ler içerir. Device Management API'de şifre yalnızca ekran kilidi için geçerlidir. Bu bölümde şifreyle ilgili sık yapılan görevler açıklanmaktadır.

Cihaz için şifre ayarlayın

Bu kodda, kullanıcıdan şifre ayarlamasını isteyen kullanıcı arayüzü görüntülenir:

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 sabit değerlerinden biri olabilir:

PASSWORD_QUALITY_ALPHABETIC
Kullanıcı en az alfabetik (veya diğer semboller) karakter içeren bir şifre girmelidir.
PASSWORD_QUALITY_ALPHANUMERIC
Kullanıcı en az hem sayısal ve alfabetik (veya diğer sembol) karakterleri 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, sayısal bir rakam ve özel bir simge içeren bir şifre girmelidir.
PASSWORD_QUALITY_SOMETHING
Politika bir tür şifre gerektiriyor ancak ne olduğu önemli değil.
PASSWORD_QUALITY_UNSPECIFIED
Politikada şifreye ilişkin bir şart yoktur.

Örneğin, şifre politikasını alfanümerik bir şifre gerektirecek şekilde şu şekilde ayarlayabilirsiniz:

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

DevicePolicyManager sınıfı, Android 3.0'dan itibaren şifrenin içeriğinde ince ayar yapmanıza olanak tanıyan yöntemler içerir. Örneğin, şifrelerin en az n büyük harf içermesi gerektiğini belirten bir politika ayarlayabilirsiniz. Bir şifrenin içeriğinde ince ayar yapmak için 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 belirleyin

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

Kotlin

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

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int pwLength;
...
dpm.setPasswordMinimumLength(deviceAdminSample, pwLength);
Maksimum başarısız şifre girişi deneme sayısını ayarlayın

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

Kotlin

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

Java

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

Android 3.0 sürümünden başlayarak, bir şifrenin süresinin ne zaman dolacağını ayarlamak için setPasswordExpirationTimeout() yöntemini kullanabilirsiniz. Bu yöntem, cihaz yöneticisinin geçerlilik bitiş zaman aşımını belirlediği andan itibaren milisaniye cinsinden delta cinsinden ifade edilir. Örnek:

Kotlin

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

Java

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

Android 3.0'dan itibaren, kullanıcıların eski şifreleri tekrar kullanma olanağını sınırlandırmak için setPasswordHistoryLength() yöntemini kullanabilirsiniz. Bu yöntem, kaç eski şifrenin depolandığını belirten bir length parametresini alır. Bu politika etkin olduğunda kullanıcılar son n şifreyle eşleşen yeni bir şifre giremez. Bu da kullanıcıların aynı şifreyi tekrar tekrar kullanmasını önler. Bu politika genellikle belirli bir süre geçtikten sonra kullanıcıları şifrelerini güncellemelerine zorlayan setPasswordExpirationTimeout() ile birlikte kullanılır.

Örneğin, bu snippet kullanıcıların son 5 şifresini 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 kilidi ayarlayın

Cihaz kilitlenmeden önce oluşabilecek maksimum işlem süresini ayarlayabilirsiniz. Örnek:

Kotlin

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

Java

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

Ayrıca programlı bir şekilde cihazın hemen kilitlenmesini de söyleyebilirsiniz:

Kotlin

private lateinit var dpm: DevicePolicyManager
dpm.lockNow()

Java

DevicePolicyManager dpm;
dpm.lockNow();

Veri silme işlemi gerçekleştir

Cihazı fabrika ayarlarına sıfırlamak için DevicePolicyManagerwipeData() yöntemini kullanabilirsiniz. Bu özellik, cihaz kaybolur veya çalınırsa yararlıdır. Cihazın silinmesi kararı, genellikle belirli koşulların karşılanmasından kaynaklanır. Örneğin, belirli sayıda başarısız şifre denemesinin ardından bir cihazın silinmesi gerektiğini belirtmek için setMaximumFailedPasswordsForWipe() kullanabilirsiniz.

Verileri aşağıdaki şekilde silebilirsiniz:

Kotlin

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

Java

DevicePolicyManager dpm;
dpm.wipeData(0);

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

Kamerayı devre dışı bırak

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

Kameranın devre dışı bırakılıp bırakılmayacağını, setCameraDisabled() yöntemini kullanarak kontrol edebilirsiniz. Örneğin, bu 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ı şifreleme

Android 3.0'dan başlayarak, desteklendiğinde depolama alanının şifrelenmesini gerektiren bir politika belirlemek için setStorageEncryption() yöntemini kullanabilirsiniz.

Örnek:

Kotlin

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

Java

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

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

Ek kod örnekleri

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