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.
![](https://developer.android.com/static/images/admin/device-admin-app.png?authuser=5&hl=tr)
Ş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:
- Aşağıdakileri içeren bir
DeviceAdminReceiver
alt sınıfı:BIND_DEVICE_ADMIN
izni.- Manifest'te intent filtresi olarak ifade edilen
ACTION_DEVICE_ADMIN_ENABLED
amacına yanıt verme yeteneği.
- Meta verilerde kullanılan güvenlik politikaları beyanı.
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çinDeviceAdminReceiver
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çinDeviceAdminReceiver
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şlemionEnabled()
içinde işler. Bu özelliğin desteklenmesi için alıcının, diğer uygulamaların kötüye kullanamaması içinBIND_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 fazlaDeviceAdminReceiver
ö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.
![](https://developer.android.com/static/images/admin/device-admin-activate-prompt.png?authuser=5&hl=tr)
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:
setPasswordMinimumLetters()
setPasswordMinimumLowerCase()
setPasswordMinimumUpperCase()
setPasswordMinimumNonLetter()
setPasswordMinimumNumeric()
setPasswordMinimumSymbols()
Ö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.