Bu geliştirici kılavuzunda, özel cihazların tek bir cihaza nasıl kilitlenebileceği açıklanmaktadır. veya bir dizi uygulama olabilir. Kurumsal mobilite yönetimi (EMM) kullanıyorsanız geliştirici veya çözüm entegratörü hesabınıza kilit görevi modunu eklemek için çözümüne geçelim.
Genel Bakış
Android, kilit görevi" adı verilen kapsamlı, kiosk benzeri bir şekilde görevleri çalıştırabilir. mod'u seçin. Bir kiosk uygulaması geliştiriyorsanız veya bir kiosk uygulaması geliştiriyorsanız bir uygulama koleksiyonu sunmak için başlatıcı. Sistem kilitleme görevinde çalıştığında modundaysa cihaz kullanıcıları genellikle bildirimleri göremez, izin verilenler listesinde olmayanlara erişim veya ana ekrana dönmenizi sağlar (ana ekran izin verilenler listesinde değilse).
Yalnızca bir cihaz politikası denetleyici (DPC) tarafından izin verilenler listesine eklenen uygulamalar çalışabilir kilit görevi moduna geçtiğinden emin olun. Kullanıcılar, izin verilenler listesine eklendiğinden kullanıcılar kilit görevi modundan her zaman çıkamaz.
Kilit görevi modu için izin verilenler listesine eklenen uygulama ve izin verilenler listesine eklenen DPC'yi birleştirme çözmek istediğiniz soruna bağlıdır. Aşağıda bazı örnekler verilmiştir:
- Kiosk (içerik sunmak için) ve mini DPC'yi bir araya getiren tek bir uygulama paketi (kilit görevi modu için kendisini izin verilenler listesine eklemek)
- Kurumsal mobilite yönetimi çözümünün parçası olan DPC, müşterinin mobil uygulamalarını kilitlemek için kullanır.
Kullanılabilirlik
Sistem, Android 5.0 veya sonraki sürümlerde kilit görevi modunda çalışabilir. Tablo 1 programları Hangi Android sürümlerinin kullanıcıya göre uygulamaları izin verilenler listesine eklemeyi desteklediğini belirtir.
Android sürümü | DPC yöneticileri | Notlar |
---|---|---|
Android 5.0 (API düzeyi 21) veya sonraki sürümler | Tümüyle yönetilen cihaz | |
Android 8.0 (API düzeyi 26) veya sonraki sürümler | İlişkili ikincil kullanıcı | İkincil kullanıcı, birincil kullanıcıyla ilişkili olmalıdır. Görüntüleyin birden çok kullanıcıya genel bakış. |
Android 9.0 (API düzeyi 28) veya sonraki sürümler | İkincil kullanıcı |
Android 9.0 veya sonraki sürümlerde DPC, herhangi bir uygulamanın etkinliğini kilit görevi modunda başlatabilir. Önceki sürümlerde, uygulama şurada kendi etkinliğini başlatmayı zaten destekliyor: kilit görevi moduna girer.
Uygulamaları izin verilenler listesine ekle
DPC'nin, kilitleme görevi modunda kullanılabilmesi için uygulamaları izin verilenler listesine eklemesi gerekir. Telefonla arama
DevicePolicyManager.setLockTaskPackages()
-
aşağıdaki örnekte gösterildiği gibi kilit görevi modu için uygulamaları izin verilenler listesine ekleyin:
Kotlin
// Allowlist two apps. private val KIOSK_PACKAGE = "com.example.kiosk" private val PLAYER_PACKAGE = "com.example.player" private val APP_PACKAGES = arrayOf(KIOSK_PACKAGE, PLAYER_PACKAGE) // ... val context = context val dpm = context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager val adminName = getComponentName(context) dpm.setLockTaskPackages(adminName, APP_PACKAGES)
Java
// Allowlist two apps. private static final String KIOSK_PACKAGE = "com.example.kiosk"; private static final String PLAYER_PACKAGE = "com.example.player"; private static final String[] APP_PACKAGES = {KIOSK_PACKAGE, PLAYER_PACKAGE}; // ... Context context = getContext(); DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); ComponentName adminName = getComponentName(context); dpm.setLockTaskPackages(adminName, APP_PACKAGES);
DPC, daha önce kilitleme görevi modu için izin verilenler listesine eklenmiş uygulamaları öğrenmek üzere
DevicePolicyManager.getLockTaskPackages()
. Diğer
uygulamalar telefon edebilir
Onaylamak için DevicePolicyManager.isLockTaskPermitted()
uygulama paketinin kilit görevi modunu desteklediğini doğrulayın.
Kilit görevi modunu başlat
Android 9.0 (API düzeyi 28) veya sonraki sürümlerde başka bir uygulamanın etkinliğini başlatabilirsiniz:
kilit görevi moduna girer. Bir etkinlik zaten ön planda çalışıyorsa veya
etkinliği yeniden başlatmanız gerekir. Telefonla arama
ActivityOptions.setLockTaskEnabled()
ve bunları sağlayın
seçeneklerini belirleyin. Aşağıdaki snippet, Google'da yaptığınız
şunu yap:
Kotlin
// Set an option to turn on lock task mode when starting the activity. val options = ActivityOptions.makeBasic() options.setLockTaskEnabled(true) // Start our kiosk app's main activity with our lock task mode option. val packageManager = context.packageManager val launchIntent = packageManager.getLaunchIntentForPackage(KIOSK_PACKAGE) if (launchIntent != null) { context.startActivity(launchIntent, options.toBundle()) }
Java
// Set an option to turn on lock task mode when starting the activity. ActivityOptions options = ActivityOptions.makeBasic(); options.setLockTaskEnabled(true); // Start our kiosk app's main activity with our lock task mode option. PackageManager packageManager = context.getPackageManager(); Intent launchIntent = packageManager.getLaunchIntentForPackage(KIOSK_PACKAGE); if (launchIntent != null) { context.startActivity(launchIntent, options.toBundle()); }
9.0'dan önceki Android sürümlerinde bir uygulama, kilitleme görevinde kendi etkinliklerini başlatır
moduna geçmek için Activity.startLockTask()
numaralı telefonu arayın. Bunu çağırmak için
yöntemini kullanıyorsanız etkinlik ön planda çalışıyor olmalıdır (Etkinlik-yaşam döngüsü
kavramları) ekleyebilirsiniz. Bu nedenle,
onResume()
yöntemi bir Activity
veya
Fragment
. startLockTask()
adlı kişiyi şu şekilde arayabilirsiniz:
Kotlin
// In our Fragment subclass. override fun onResume() { super.onResume() // First, confirm that this package is allowlisted to run in lock task mode. if (dpm.isLockTaskPermitted(context.packageName)) { activity.startLockTask() } else { // Because the package isn't allowlisted, calling startLockTask() here // would put the activity into screen pinning mode. } }
Java
// In our Fragment subclass. @Override public void onResume() { super.onResume(); // First, confirm that this package is allowlisted to run in lock task mode. if (dpm.isLockTaskPermitted(context.getPackageName())) { getActivity().startLockTask(); } else { // Because the package isn't allowlisted, calling startLockTask() here // would put the activity into screen pinning mode. } }
Kullanıcı bunu yapmayabileceği için cihaz kilitliyken kilitleme görevi modunu başlatmayın
cihazın kilidini açabilmelisiniz. KeyguardManager
yöntemlerini çağırarak şunları yapabilirsiniz:
cihazın kilitli olup olmadığını öğrenin ve Activity
yaşam döngüsü kullanın
geri çağırma (örneğin, kilidi açtıktan sonra çağrılan onResume()
)
kilit görevi modunu başlat.
Kilit görevi modundaki bir uygulama, etkinlik devam ettiği sürece yeni etkinlikler başlatabilir yeni bir görev başlatmaz (izin verilenler listesindeki bir uygulamayı başlatan görevler hariç). Alıcı: görevlerin etkinliklerle ilişkili olduğunu anlamak için Görevler ve Geri Yığını.
Alternatif olarak, aşağıdakileri de uygulama manifestinizde beyan edebilirsiniz.
dosyası
sistem kilit görevi modunda çalışıyor. Sistemin otomatik olarak çalışmasını sağlamak için
kilidini açmak için
android:lockTaskMode
özelliğini if_whitelisted
olarak değiştirin:
aşağıdaki örnekte gösterilmektedir:
<activity
android:name=".MainActivity"
android:lockTaskMode="if_whitelisted">
<!-- ... -->
</activity>
Uygulama manifest dosyasında seçenekleri bildirme hakkında daha fazla bilgi edinmek için
lockTaskMode
referansı.
Kilit görevi modunu durdur
DPC, uygulama paketini
izin verilenler listesine eklenir. Telefonla arama
DevicePolicyManager.setLockTaskPackages()
, inç
Android 6.0 (API düzeyi 23) veya sonraki sürümlerde kullanılabilir.
izin verilenler listesi dizisidir. İzin verilenler listesini güncellediğinizde uygulama, önceki sürüme geri döner.
görevi görebilir.
Daha önce startLockTask()
adlı bir etkinlik varsa bu etkinlik telefon edebilir
Kilit görevi modunu durdurmak için Activity.stopLockTask()
. Bu yöntem
yalnızca kilitleme görevi modunu başlatan etkinliklerde kullanılabilir.
Yaşam döngüsü geri çağırmaları
DPC'niz, bir uygulamanın (aynı kullanıcı üzerinde çalışan) ne zaman çalıştırıldığını bilmek işinizi kolaylaştırabilir
kilit görevi moduna girip çıkar. Geri arama almak için aşağıdaki ayarı geçersiz kılın
geri çağırma yöntemleri:DeviceAdminReceiver
onLockTaskModeEntering()
- Bir uygulama, kilitleme görevi moduna girdikten sonra çağrılır. Bir paketin adını alabilirsiniz.
uygulamasını
pkg
bağımsız değişkeninden alıyor. onLockTaskModeExiting()
- Bir uygulama, kilit görevi modundan çıktıktan sonra çağrılır. Bu geri arama işlemi gerçekleşmez bilgileri sağlaması gerekir.
Başka bir uygulamayı kilit görevi modunda başlatırsanız
durumu hakkında daha fazla bilgi edinin. Mevcut uygulamanın kilit görevinde çalışıp çalışmadığını kontrol etmek için
aşağıda gösterildiği gibi, ActivityManager
bağlantısındaki yöntemleri kullanın
örnek:
Kotlin
// Check if this app is in lock task mode. Screen pinning doesn't count. var isLockTaskModeRunning = false val activityManager = context .getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { isLockTaskModeRunning = activityManager.lockTaskModeState == ActivityManager.LOCK_TASK_MODE_LOCKED } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // Deprecated in API level 23. isLockTaskModeRunning = activityManager.isInLockTaskMode } if (isLockTaskModeRunning) { // Show the exit button ... }
Java
// Check if this app is in lock task mode. Screen pinning doesn't count. boolean isLockTaskModeRunning = false; ActivityManager activityManager = (ActivityManager) getContext().getSystemService(Context.ACTIVITY_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { isLockTaskModeRunning = activityManager.getLockTaskModeState() == ActivityManager.LOCK_TASK_MODE_LOCKED; } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // Deprecated in API level 23. isLockTaskModeRunning = activityManager.isInLockTaskMode(); } if (isLockTaskModeRunning) { // Show the exit button ... }
Kullanıcı arayüzünü özelleştirme
Bir uygulama kilitleme görevi modunda çalıştığında sistem kullanıcı arayüzü (UI) şu yöntemleri kullanabilirsiniz:
- Durum çubuğu boşken bildirimler ve sistem bilgileri gizleniyor.
- Ana Sayfa ve Genel Bakış düğmeleri gizlenir.
- Diğer uygulamalar yeni etkinlik başlatamaz.
- Kilit ekranı (ayarlanmışsa) devre dışı bırakılır.
Kilit görevi modu etkinken Android 9.0 veya sonraki sürümlerde DPC'niz şunları etkinleştirebilir:
cihazdaki belli sistem kullanıcı arayüzü özellikleri; özel bir
Başlatıcı. Telefonla arama
Gösterildiği şekliyle DevicePolicyManager.setLockTaskFeatures()
aşağıdaki snippet'te:
Kotlin
// Enable the Home and Overview buttons so that our custom launcher can respond // using our custom activities. Implicitly disables all other features. dpm.setLockTaskFeatures( adminName, DevicePolicyManager.LOCK_TASK_FEATURE_HOME or DevicePolicyManager.LOCK_TASK_FEATURE_OVERVIEW)
Java
// Enable the Home and Overview buttons so that our custom launcher can respond // using our custom activities. Implicitly disables all other features. dpm.setLockTaskFeatures(adminName, DevicePolicyManager.LOCK_TASK_FEATURE_HOME | DevicePolicyManager.LOCK_TASK_FEATURE_OVERVIEW);
Sistem, flags
bağımsız değişkenine dahil etmediğiniz tüm özellikleri devre dışı bırakır. İlgili içeriği oluşturmak için kullanılan
etkinleştirilen kullanıcı arayüzü özellikleri, lansmanlar arasında kilit görevi moduna geçmeye devam eder. Cihaz
zaten kilitleme görevi modunda, kilitleme görevi özelliklerinde yaptığınız tüm değişiklikler
hemen gösterilir. Tablo 2'de, özelleştirebileceğiniz kullanıcı arayüzü özellikleri açıklanmaktadır.
Sistem kullanıcı arayüzü özelliği | Açıklama |
---|---|
LOCK_TASK_FEATURE_HOME
|
Ana Sayfa düğmesini gösterir. Özel başlatıcılar için etkinleştir (etkin bir Varsayılan Android sürümünü izin verilenler listesine eklemediğiniz sürece ana sayfa düğmesinde işlem yapılmaz Başlatıcı. |
LOCK_TASK_FEATURE_OVERVIEW
|
Genel Bakış düğmesini gösterir (bu düğmeye dokunduğunuzda Son aramalar ekranına dokunun). Şu durumda: ana sayfa düğmesini de etkinleştirmeniz gerekir. |
LOCK_TASK_FEATURE_GLOBAL_ACTIONS
|
güç düğmesine basın. Etkinleştirilen tek özellik,
setLockTaskFeatures() .
çağrılmadı. Genellikle kullanıcı, cihazı kapatamaz.
bu iletişim kutusunu devre dışı bırak |
LOCK_TASK_FEATURE_NOTIFICATIONS
|
Tüm uygulamalar için bildirimleri etkinleştirir. Bildirim simgeleri durum çubuğu, uyarı bildirimleri ve genişletilebilir bildirim gölgesi. Bu düğmeyi etkinleştirirseniz Ana Sayfa düğmesini de etkinleştirmeniz gerekir. Dokunma yeni panelleri açan bildirim işlemleri ve düğmeleri kilitli çalışmıyor görev moduna girebilirsiniz. |
LOCK_TASK_FEATURE_SYSTEM_INFO
|
Durum çubuğunun, ses ve titreşim seçenekleri sunuluyor. |
LOCK_TASK_FEATURE_KEYGUARD
|
Cihazda ayarlanmış olabilecek tüm kilit ekranlarını etkinleştirir. Normalde bilgi kioskları gibi herkese açık kullanıcılara sahip cihazlar için uygundur. dijital tabelalar kullanabilirsiniz. |
LOCK_TASK_FEATURE_NONE
|
Yukarıda listelenen tüm sistem kullanıcı arayüzü özelliklerini devre dışı bırakır. |
Bir DPC arayabilir
Almak için DevicePolicyManager.getLockTaskFeatures()
kilit görevi modu etkinleştirildiğinde bir cihazda kullanılabilen özelliklerin listesi. Zaman
Bir cihaz kilit görevi modundan çıkarsa kullanıcı arayüzü zorunlu duruma döner.
Mevcut cihaz politikalarına göre.
Pencereleri ve yer paylaşımlarını engelleme
Bir uygulama kilitleme görevi modunda çalışırken diğer uygulamalar ve arka plan hizmetleri
Android'in kilit görevi modunda uygulamanın önünde görüntülediği yeni pencereler oluştur.
Uygulamalar ve hizmetler, kullanıcılara tostları, iletişim kutularını ve yer paylaşımlarını göstermek için bu pencereleri oluşturur
etkili bir yoludur. DPC'niz bunları önlemek için
DISALLOW_CREATE_WINDOWS
kullanıcı kısıtlaması.
Aşağıdaki örnek,
onLockTaskModeEntering()
geri araması:
Kotlin
// Called just after entering lock task mode. override fun onLockTaskModeEntering(context: Context, intent: Intent) { val dpm = getManager(context) val admin = getWho(context) dpm.addUserRestriction(admin, UserManager.DISALLOW_CREATE_WINDOWS) }
Java
// Called just after entering lock task mode. public void onLockTaskModeEntering(Context context, Intent intent) { DevicePolicyManager dpm = getManager(context); ComponentName admin = getWho(context); dpm.addUserRestriction(admin, UserManager.DISALLOW_CREATE_WINDOWS); }
Cihaz kilit görevi modundan çıktığında DPC'niz kullanıcı kısıtlamasını kaldırabilir.
Ek kaynaklar
Bir amaca özel ayrılmış cihazlar hakkında daha fazla bilgi edinmek için aşağıdaki dokümanları okuyun:
- Özel cihazlara özel tarif defteri cihazlar ve kullanıcı deneyimini geliştirmek.
- Özel cihazlara genel bakış, cihazlar.
- Birden çok kullanıcıyı yönetme bölümünde, cihazlar arasında nasıl cihaz paylaşılacağı açıklanmaktadır. yardımcı olur.