Görev modunu kilitleme

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.

Tablo 1. DPC yönetici modları için Android sürüm desteği
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.
'nı inceleyin.

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.

Tablo 2. Kilit görevi modunda özelleştirilebilir sistem kullanıcı arayüzü özellikleri
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: