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ğıdakileri içeren bir
DeviceAdminReceiver
alt sınıfı:BIND_DEVICE_ADMIN
izni- Manifest dosyasında amaç filtresi olarak ifade edilen
ACTION_DEVICE_ADMIN_ENABLED
amacına yanıt verme özelliği.
- Meta verilerde kullanılan güvenlik politikalarının beyanı.
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çinDeviceAdminReceiver
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
, birDeviceAdminReceiver
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 bunuonEnabled()
içinde işler. Alıcının da desteklenmesi için diğer uygulamaların kötüye kullanmaması amacıylaBIND_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 fazlaDeviceAdminReceiver
ö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:
setPasswordMinimumLetters()
setPasswordMinimumLowerCase()
setPasswordMinimumUpperCase()
setPasswordMinimumNonLetter()
setPasswordMinimumNumeric()
setPasswordMinimumSymbols()
Ö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.