Cihaz yöneticisi desteğinin sonlandırılması. Android 9'dan (API düzeyi 28) itibaren, bazı yönetici politikaları bir cihaz yöneticisi tarafından çağrıldığında kullanımdan kaldırılmış olarak işaretlenecektir. Bu değişikliğe hazırlanmaya şimdiden 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 cihaz Yönetimi API'sini sunarak kurumsal uygulamalar için destek sağlar. Device Administration API, sistem düzeyinde cihaz yönetimi özellikleri sunar. Bu API'ler, BT uzmanlarının çalışan cihazları üzerinde kapsamlı kontrol sahibi olması gereken 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 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, kaybolan veya çalınan telefonları uzaktan silebilir (yani fabrika varsayılanları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ştiricilere yöneliktir. Android tarafından desteklenen çalışan cihazları için daha güçlü güvenlik sağlamak amacıyla Device Administration API tarafından sunulan çeşitli özellikler ele alınmaktadır.
Not Android for Work dağıtımları için Work Policy Controller oluşturma hakkında bilgi edinmek istiyorsanız Cihaz Politikası Denetleyici Oluşturma başlıklı makaleyi inceleyin.
Başsız Cihaz Sahibi Modu
Android 14 (API düzeyi 34), gözetimsiz sistem kullanıcı modunu (UserManager.isHeadlessSystemUserMode değerinin true döndürdüğü cihazlar) kullanıma sunar. Gözetimsiz sistem kullanıcı modunda, 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 ihtiyaç duyar. Android 14'te ayrıca, cihaz sahibinin ayarlandığı sistem kullanıcısı dışındaki tüm ilişkili kullanıcılara bir profil sahibi ekleyen gözetimsiz cihaz sahibi ilişkili modu da sunulur.
Başsız sistem kullanıcısıyla yapılandırılmış cihazlarda (sistem kullanıcısının arka planda çalıştığı durumlarda) yalnızca kapsamı genel olan cihaz politikaları (tüm kullanıcılar için geçerli olan politikalar) ön plan kullanıcısına veya kullanıcılarına uygulanır. Ayrıntılar için addUserRestriction sayfasına bakın.
Android cihaz üreticileri, source.android.com adresinde yayınlanan kılavuzdan yararlanabilir.
Cihaz yönetimi API'sine 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ı uygular. İşleyiş şekli:
- Sistem yöneticisi, uzak/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 alabilir.
- Uygulama, kullanıcıların cihazlarına yüklenir. Android'de şu anda otomatik temel hazırlık çözümü yoktur. 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 yöntemlerle dağıtma
- Sistem, kullanıcıdan cihaz yöneticisi 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öneticisi uygulamasını etkinleştirdikten sonra uygulamanın politikalarına tabi olur. Bu politikalara uymak 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 etkin olmaz. Kullanıcılar uygulamanın politikalarına tabi olmaz ve uygulamanın avantajlarından (ör. veri senkronizasyonu) yararlanamaz.
Bir kullanıcı politikalara uymazsa (örneğin, kuralları ihlal eden bir şifre belirlerse) bu durumun nasıl ele alınacağına uygulama karar verir. Ancak bu durum genellikle kullanıcının verileri senkronize edememesine neden olur.
Bir cihaz, Device Administration API'de desteklenmeyen politikalar gerektiren bir sunucuya bağlanmaya çalışırsa bağlantıya izin verilmez. Device Administration API şu anda kısmi temel hazırlığa izin vermiyor. Başka bir deyişle, bir cihaz (ör. 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 bir yolu yoktur.
Mevcut bir cihaz yöneticisi uygulamasını kaldırmak için kullanıcıların önce uygulamanın yönetici kaydını iptal etmesi gerekir.
Politikalar
Kurumsal ortamlarda, çalışanların cihazlarının genellikle cihaz kullanımını düzenleyen katı bir dizi politikaya uyması gerekir. Device Administration API, 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 veya şifrelerin en az altı karakterden oluşmasını zorunlu kılabilirsiniz. |
| Alfa-sayısal şifre gerekli | Şifrelerin harf ve rakam kombinasyonundan oluşmasını zorunlu kılar. Sembolik karakterler içerebilirler. |
| Karmaşık şifre gerekli | Şifrelerin en az bir harf, bir rakam ve bir özel simge 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 bulunması gereken 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 bulunması gereken minimum küçük harf sayısı. Android 3.0'da kullanıma sunulmuştur. |
| Şifrede harf olmayan minimum karakter sayısı | Tüm yöneticiler veya belirli bir yönetici için şifrede bulunması gereken minimum harf olmayan karakter sayısı. Android 3.0'da kullanıma sunulmuştur. |
| Şifrede bulunması gereken minimum rakam sayısı | Tüm yöneticiler veya belirli bir yönetici için şifrede bulunması gereken 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 bulunması gereken 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 geçerlilik süresi | Şifrenin geçerlilik süresinin ne zaman sona ereceği, cihaz yöneticisinin geçerlilik süresi zaman aşımını ayarladığı andan itibaren milisaniye cinsinden fark olarak 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ı | Cihazın verilerini silmeden önce kullanıcının 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 sayede, cihaz kaybolur veya çalınırsa veriler güvende olur. |
| Maksimum işlem yapılmama süresi kilidi | Kullanıcının ekrana son dokunmasından veya bir düğmeye basmasından sonra cihazın ekranı kilitlemesine kadar geçecek süreyi belirler. Bu durumda kullanıcıların cihazlarını kullanabilmeleri ve verilere erişebilmeleri için PIN'lerini 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'da kullanıma sunulmuştur. |
| Kamerayı devre dışı bırak | Kameranın devre dışı bırakılması gerektiğini belirtir. Bu devre dışı bırakma işleminin kalıcı olması gerekmez. Kamera; bağlam, zaman vb. ölçütlere göre dinamik olarak etkinleştirilebilir/devre dışı bırakılabilir. Android 4.0'da kullanıma sunulmuştur. |
Diğer özellikler
Device Administration API, yukarıdaki tabloda listelenen politikaları desteklemenin yanı sıra aşağıdakileri yapmanıza olanak tanır:
- Kullanıcıdan yeni bir şifre belirlemesini isteyin.
- Cihazı hemen kilitleyin.
- Cihazın verilerini silme (cihazı fabrika varsayılan ayarlarına geri yükleme)
Örnek uygulama
Bu sayfada kullanılan örnekler, SDK örneklerine (Android SDK Manager aracılığıyla kullanılabilir) dahil olan ve sisteminizde <sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java konumunda bulunan Device Administration API örneğini temel alı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 aşağıdakileri yapabilirler:
- Şifre kalitesini ayarlayın.
- Kullanıcı şifresi için minimum uzunluk, içermesi gereken minimum sayısal karakter sayısı gibi şartları 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ç kez 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 saklanan 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 şifrelenmesi gerektiğini belirtin.
- Cihaz kilitlenmeden önce geçebilecek maksimum işlem yapılmayan süreyi ayarlayın.
- Cihazın hemen kilitlenmesini sağlayın.
- Cihazın verilerini silme (fabrika ayarlarına geri yükleme)
- Kamerayı devre dışı bırakma
Şekil 1. Örnek uygulamanın ekran görüntüsü
Cihaz yönetimi uygulaması geliştirme
Sistem yöneticileri, uzak/yerel cihaz güvenlik politikasının uygulanmasını zorunlu kılan bir uygulama yazmak için Device Administration API'yi 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
DeviceAdminReceiveralt sınıfı:BIND_DEVICE_ADMINizni.- Manifestte intent filtresi olarak ifade edilen
ACTION_DEVICE_ADMIN_ENABLEDintent'ine 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 uygulama için
ApiDemos/res/values/strings.xmldizininde bulunan dize kaynaklarını ifade eder. Kaynaklar hakkında daha fazla bilgi için Uygulama Kaynakları bölümüne bakın.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", alıcıyla yalnızca sistemin etkileşimde bulunabilmesi için (hiçbir uygulamaya bu izin verilemez) birDeviceAdminReceiveralt sınıfının sahip olması gereken bir izindir. Bu, diğer uygulamaların cihaz yöneticisi uygulamanızı kötüye kullanmasını önler.android.app.action.DEVICE_ADMIN_ENABLED, bir cihazı yönetmesine izin verilmesi içinDeviceAdminReceiveralt sınıfının 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. Desteklenmesi için alıcının, diğer uygulamaların kötüye kullanamaması amacıylaBIND_DEVICE_ADMINiznini de istemesi gerekir.- 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 olduğunda uygulama bir politika uygulayabilir. Örneğin, kullanıcı politika koşullarını karşılamayan yeni bir şifre belirlemeye çalışırsa uygulama, kullanıcıdan koşulları karşılayan farklı bir şifre seçmesini isteyebilir.
- Uygulamanızı yayınladıktan sonra alıcı adını değiştirmeyin. Manifest dosyasındaki 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ı beyan eder. Meta veriler,DeviceAdminInfosınıfı tarafından ayrıştırıldığı şekilde cihaz yöneticisine özgü ek bilgiler sağlar.device_admin_sample.xmliç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 alakalı olanları eklemeniz yeterlidir.
Manifest dosyası hakkında daha fazla bilgi için Android Geliştirici Kılavuzu'na bakın.Kodu uygulama
Device Administration 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 yorumlamayı kolaylaştırır. Cihaz Yönetimi uygulamanızda bir
DeviceAdminReceiveralt sınıfı bulunmalıdır. DevicePolicyManager- Cihazda uygulanan politikaları yönetmek için kullanılan bir sınıf. Bu sınıftaki çoğu istemcinin, kullanıcının şu anda etkinleştirdiği bir
DeviceAdminReceiveryayınlamış olması gerekir.DevicePolicyManager, bir veya daha fazlaDeviceAdminReceiverörneği için politikaları 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 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.
DeviceAdminReceiver'ın alt sınıfını oluşturma
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
Cihaz yöneticisi uygulamasının işlemesi gereken önemli olaylardan 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ı uygulanmaz ve kullanıcı uygulamanın avantajlarından yararlanamaz.
Uygulamayı etkinleştirme süreci, kullanıcı ACTION_ADD_DEVICE_ADMIN intent'ini tetikleyen bir işlem gerçekleştirdiğinde başlar. Örnek uygulamada bu, 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öneticisi 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ülen kod verilmiştir. Bu, onPreferenceChange() geri çağırma işlevini tetikler. Bu geri çağırma, bu Preference değeri kullanıcı tarafından değiştirildiğinde ve ayarlanmak ve/veya kalıcı hale getirilmek üzereyken çağrılır. Kullanıcı uygulamayı etkinleştiriyorsa ekran, Şekil 2'de gösterildiği gibi kullanıcıdan cihaz yöneticisi uygulamasını etkinleştirmesini isteyecek şekilde değişir. Aksi takdirde cihaz yöneticisi 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ı, mDeviceAdminSample (bir DeviceAdminReceiver bileşeni) öğesinin hedef politika olduğunu belirtir.
Bu satır, Şekil 2'de gösterilen kullanıcı arayüzünü çağırır. Bu arayüz, kullanıcıya cihaz yöneticisini sisteme ekleme konusunda yol gösterir (veya reddetmesine izin verir).
Uygulama, cihaz yöneticisi uygulamasının etkinleştirilmesine bağlı bir işlem gerçekleştirmesi gerektiğinde uygulamanın etkin olduğunu onaylar. Bunun için DevicePolicyManager yöntemini kullanır
isAdminActive(). DevicePolicyManager yönteminin isAdminActive(), bağımsız değişken 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 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 gibi 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 aracının nasıl kullanılacağı açıklanmaktadır:
Şifre politikalarını ayarlama
DevicePolicyManager, cihaz şifre politikasını ayarlamak ve uygulamak için API'ler içerir. Device Administration 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 ayarlama
Bu kod, kullanıcıdan ş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ından alfabetik (veya başka sembol) karakterler içeren bir şifre girmelidir.
PASSWORD_QUALITY_ALPHANUMERIC- Kullanıcı, en azından hem sayısal hem de alfabetik (veya diğer semboller) karakterler 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ğu önemli değildir.
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 komutu kullanabilirsiniz:
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ğinde hassas ayarlamalar 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 oluşturabilirsiniz. Şifre içeriğinde ince ayar yapmak için kullanabileceğiniz yöntemler şunlardır:
setPasswordMinimumLetters()setPasswordMinimumLowerCase()setPasswordMinimumUpperCase()setPasswordMinimumNonLetter()setPasswordMinimumNumeric()setPasswordMinimumSymbols()
Ö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 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 silinmeden (yani fabrika ayarlarına sıfırlanmadan) ö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, bir şifrenin geçerlilik süresinin ne zaman dolacağını ayarlamak için setPasswordExpirationTimeout() yöntemini kullanabilirsiniz. Bu süre, cihaz yöneticisinin geçerlilik süresi zaman aşımını ayarladığı andan itibaren milisaniye cinsinden bir fark 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 kullanma imkanını sınırlamak için setPasswordHistoryLength() yöntemini kullanabilirsiniz. Bu yöntem, kaç tane eski şifrenin
saklanacağını belirten bir length
parametresi alı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ı önler. Bu politika genellikle, kullanıcıları belirli bir süre geçtikten sonra şifrelerini güncellemeye zorlayan setPasswordExpirationTimeout() ile birlikte kullanılır.
Örneğin, bu snippet kullanıcıların son 5 şifrelerinden 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 kilitlenmeden önce kullanıcının etkin olmadığı maksimum süreyi 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);
Cihaza programatik olarak hemen kilitlenmesini de söyleyebilirsiniz:
Kotlin
private lateinit var dpm: DevicePolicyManager dpm.lockNow()
Java
DevicePolicyManager dpm; dpm.lockNow();
Veri silme işlemi gerçekleştirme
Cihazı fabrika ayarlarına sıfırlamak için DevicePolicyManager yöntemini
wipeData() kullanabilirsiniz. Bu, 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 girişi denemesinden sonra cihazın temizlenmesi 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, ek seçeneklerin bit maskesini parametre olarak 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. Bu devre dışı bırakma işleminin kalıcı olması gerekmez. Kamera; bağlam, zaman vb. ölçütlere göre dinamik olarak etkinleştirilebilir veya devre dışı bırakılabilir.
setCameraDisabled() yöntemini kullanarak kameranın devre dışı bırakılıp bırakılmayacağını kontrol edebilirsiniz. Örneğin, bu snippet, kamerayı bir onay kutusu ayarına göre etkinleştirilecek veya devre dışı bırakılacak ş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 itibaren, desteklenen yerlerde depolama alanının şifrelenmesini zorunlu kılan 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 alanı şifrelemenin nasıl etkinleştirileceğine dair eksiksiz bir örnek için Device Administration API ö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.