W tym przewodniku dla programistów omawiamy, jak można powiązać specjalne urządzenia z 1 urządzeniem lub zestaw aplikacji. Jeśli korzystasz z usługi zarządzania urządzeniami mobilnymi (EMM) dewelopera lub integratora rozwiązań przeczytaj ten przewodnik, aby dodać tryb zadań blokady do i rozwiązania problemu.
Omówienie
Android może uruchamiać zadania w bardzo atrakcyjny sposób, zwany zadaniem blokady. . Trybu blokady możesz użyć, jeśli tworzysz aplikację kiosku lub Menu z aplikacjami do prezentacji. Gdy system jest uruchomiony w zadaniu blokady użytkownicy urządzeń zwykle nie widzą powiadomień, korzystają z treści spoza listy dozwolonych aplikacji lub wrócić do ekranu głównego (chyba że ekran główny znajduje się na liście dozwolonych).
Mogą działać tylko aplikacje znajdujące się na liście dozwolonych przez kontroler zasad dotyczących urządzeń (DPC) gdy system jest w trybie blokady zadań. Aplikacje znajdują się na liście dozwolonych, ponieważ użytkownik przy użyciu urządzenia nie zawsze może wyjść z trybu blokady zadania.
Jak połączyć aplikację znajdującą się na liście dozwolonych w trybie zadań blokady i DPC z listą dozwolonych zależy od problemu, który chcesz rozwiązać. Oto przykłady:
- Jeden pakiet aplikacji, który łączy kiosk (do prezentowania treści) i mini DPC (aby dodać ją do listy dozwolonych w trybie zadania blokady).
- DPC wchodzące w skład rozwiązania do zarządzania urządzeniami mobilnymi w firmie aplikacji mobilnych klienta w trybie blokady zadań.
Dostępność
Na Androidzie 5.0 lub nowszym system może działać w trybie blokady zadań. Programy z tabeli 1 które wersje Androida obsługują dodawanie aplikacji do listy dozwolonych według użytkowników.
Wersja Androida | Administruje przez DPC | Uwagi |
---|---|---|
Android 5.0 (poziom interfejsu API 21) lub nowszy | Urządzenie w pełni zarządzane | |
Android 8.0 (poziom interfejsu API 26) lub nowszy | Powiązany użytkownik dodatkowy | Użytkownik dodatkowy musi być powiązany z użytkownikiem głównym. Zobacz dla wielu użytkowników. |
Android 9.0 (poziom interfejsu API 28) lub nowszy | Użytkownik dodatkowy |
W Androidzie 9.0 lub nowszym DPC może włączyć tryb blokady zadań w dowolnej aplikacji. We wcześniejszych wersjach aplikacja musi obsługiwać rozpoczynanie własnej aktywności w trybu blokady zadań.
Dodaj aplikacje do listy dozwolonych
DPC musi dodać aplikacje do listy dozwolonych, zanim będzie można ich używać w trybie blokady zadań. Zadzwoń do nas
DevicePolicyManager.setLockTaskPackages()
do
dodaj aplikacje do listy dozwolonych na potrzeby trybu blokady zadań, jak pokazano w tym przykładzie:
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);
Aby dowiedzieć się, które aplikacje znajdują się wcześniej na liście dozwolonych w trybie blokady zadań, DPC może wywołać metodę
DevicePolicyManager.getLockTaskPackages()
Inny powód
aplikacje mogą dzwonić
DevicePolicyManager.isLockTaskPermitted()
, aby potwierdzić
pakiet aplikacji obsługuje tryb blokady zadań.
Włącz tryb blokady zadań
W Androidzie 9.0 (poziom interfejsu API 28) lub nowszym możesz rozpocząć aktywność w innej aplikacji tutaj:
trybu blokady zadań. jeśli jakaś aktywność jest już wykonywana na pierwszym planie lub
musisz ponownie uruchomić aktywność. Zadzwoń do nas
ActivityOptions.setLockTaskEnabled()
i dostarcz te
opcje dostępne podczas rozpoczynania aktywności. Ten fragment kodu przedstawia jeden ze sposobów
wykonaj następujące czynności:
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()); }
Na urządzeniach z Androidem w wersji starszej niż 9.0 aplikacja rozpoczyna własne działania w zadaniu blokady
w trybie online, wywołując metodę Activity.startLockTask()
. Aby zadzwonić
aktywność musi być uruchomiona na pierwszym planie (patrz Activity-lifecycle
koncepcjach), więc zalecamy wywołanie
onResume()
metody Activity
lub
Fragment
Aby zadzwonić pod numer startLockTask()
:
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. } }
Nie uruchamiaj trybu blokady zadań, gdy urządzenie jest zablokowane, ponieważ użytkownik może tego nie robić
odblokować urządzenie. Możesz wywoływać metody KeyguardManager
, aby
Sprawdzanie, czy urządzenie jest zablokowane, i korzystaj z cyklu życia Activity
wywołanie zwrotne (np. onResume()
, które jest wywoływane po odblokowaniu) do
uruchomić tryb blokady zadań.
Aplikacja w trybie blokady zadań może uruchamiać nowe działania, o ile tylko nie uruchamia nowego zadania (z wyjątkiem zadań uruchamiających aplikację znajdującą się na liście dozwolonych). Do i zrozumieć, w jaki sposób zadania są powiązane z czynnościami, przeczytaj przewodnik Omówienie zadań i Stos tylny.
Możesz też zadeklarować w pliku manifestu aplikacji,
jak powinna zachowywać się aktywność,
system działa w trybie zadań blokady; Automatyczne uruchamianie systemu
aktywności w trybie blokady ekranu, ustaw
android:lockTaskMode
do if_whitelisted
jako
w tym przykładzie:
<activity
android:name=".MainActivity"
android:lockTaskMode="if_whitelisted">
<!-- ... -->
</activity>
Więcej informacji o opcjach deklarowania znajdziesz w pliku manifestu aplikacji
odwołanie do lockTaskMode
.
Zatrzymaj tryb blokady zadań
DPC może zdalnie zatrzymać tryb blokady zadań, usuwając pakiet aplikacji z
lista dozwolonych. Zadzwoń do nas
DevicePolicyManager.setLockTaskPackages()
, w
Androida 6.0 (poziom interfejsu API 23) lub nowszego i pomiń nazwę pakietu w
lista dozwolonych. Gdy zaktualizujesz listę dozwolonych, aplikacja wróci do poprzedniej wersji
które można wykonać na stosie.
Jeśli aktywność miała wcześniej nazwę startLockTask()
, może wywołać metodę wywołania
Activity.stopLockTask()
, aby wyłączyć tryb blokady zadań. Ta metoda
działa tylko w przypadku aktywności, która uruchomiła tryb blokady zadań.
Wywołania zwrotne cyklu życia
DPC może chcieć wiedzieć, kiedy aplikacja (uruchomiona przez tego samego użytkownika) może być przydatna
włącza i wyłącza tryb blokady zadań. Aby otrzymywać wywołania zwrotne, zastąp te ustawienia
metody wywołania zwrotnego w podklasie DeviceAdminReceiver
DPC:
onLockTaskModeEntering()
- Wywoływane po przejściu aplikacji w tryb blokady zadań. Możesz uzyskać nazwę pakietu dla
aplikacji za pomocą argumentu
pkg
. onLockTaskModeExiting()
- Wywoływane po zamknięciu trybu blokady zadania przez aplikację. To oddzwonienie nie otrzyma informacje o aplikacji.
Jeśli uruchomisz inną aplikację w trybie blokady zadań, musisz śledzić działanie
w Twojej aplikacji. Aby sprawdzić, czy bieżąca aplikacja działa w zadaniu blokady
użyj metod na ActivityManager
, jak pokazano poniżej
przykład:
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 ... }
Dostosowywanie interfejsu użytkownika
Gdy aplikacja działa w trybie blokady zadań, interfejs systemu zmienia się w w następujący sposób:
- Pasek stanu jest pusty, a powiadomienia i informacje o systemie są ukryte.
- Przyciski Strona główna i Przegląd są ukryte.
- Inne aplikacje nie mogą uruchamiać nowych aktywności.
- Ekran blokady (jeśli jest ustawiony) jest wyłączony.
W Androidzie 9.0 lub nowszym po włączeniu trybu blokady DPC może włączyć tę funkcję
określonych funkcji interfejsu systemu na urządzeniu – przydatne dla programistów tworzących niestandardowy
Menu z aplikacjami. Zadzwoń do nas
DevicePolicyManager.setLockTaskFeatures()
jak pokazano
w tym fragmencie:
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);
System wyłącza wszystkie funkcje, które nie są uwzględnione w argumencie flags
.
włączone funkcje interfejsu zachowywane są między uruchomieniami w trybie blokady zadań. Jeśli urządzenie
jest już w trybie blokady zadań, wszelkie zmiany wprowadzone przez Ciebie w funkcjach zadania blokady
mogą być wyświetlane od razu. Tabela 2 opisuje funkcje interfejsu, które możesz dostosować.
Funkcja interfejsu systemu | Opis |
---|---|
LOCK_TASK_FEATURE_HOME
|
Wyświetla przycisk strony głównej. Włącz dla niestandardowych programów uruchamiających – kliknij włączone Przycisk ekranu głównego nie działa, chyba że dodasz domyślny system Android do listy dozwolonych Menu z aplikacjami. |
LOCK_TASK_FEATURE_OVERVIEW
|
Wyświetla przycisk Przegląd (kliknięcie tego przycisku otwiera Ostatnie). Jeśli tego przycisku, musisz też włączyć przycisk strony głównej. |
LOCK_TASK_FEATURE_GLOBAL_ACTIONS
|
Włącza okno działań globalnych wyświetlane po przytrzymaniu przycisku
przycisk zasilania. Jedyną funkcją, która jest włączona,
setLockTaskFeatures()
nie został wywołany. Użytkownik zwykle nie może wyłączyć urządzenia, jeśli
wyłączyć to okno. |
LOCK_TASK_FEATURE_NOTIFICATIONS
|
Włącza powiadomienia dla wszystkich aplikacji. To pokazuje ikony powiadomień w pasek stanu, powiadomienia HUD i rozwijany obszar powiadomień. Jeśli włączysz ten przycisk, musisz też włączyć przycisk strony głównej. Dotykanie działania związane z powiadomieniami i przyciski otwierające nowe panele, nie działa z blokadą w trybie zadania. |
LOCK_TASK_FEATURE_SYSTEM_INFO
|
Włącza na pasku stanu obszar informacyjny o systemie, który zawiera wskaźniki takie jak: jak połączenia, bateria, dźwięk i wibracje. |
LOCK_TASK_FEATURE_KEYGUARD
|
Włącza każdy ekran blokady, który może być ustawiony na urządzeniu. Zwykle nie odpowiednie dla urządzeń dostępnych dla użytkowników publicznych, takich jak kioski informacyjne lub treści informacyjno-reklamowe. |
LOCK_TASK_FEATURE_NONE
|
Wyłącza wszystkie wymienione powyżej funkcje interfejsu systemowego. |
DPC może zadzwonić
DevicePolicyManager.getLockTaskFeatures()
, aby otrzymać
lista funkcji dostępnych na urządzeniu po włączeniu trybu blokady zadań. Kiedy
urządzenie wyjdzie z trybu blokady zadania, interfejs użytkownika powróci do określonego stanu
przy użyciu istniejących zasad dotyczących urządzeń.
Blokuj okna i nakładki
Gdy aplikacja działa w trybie blokady zadań, inne aplikacje i usługi w tle mogą
tworzyć nowe okna, które Android wyświetla przed aplikacją w trybie blokady zadań.
Aplikacje i usługi tworzą te okna, aby wyświetlać tosty, okna dialogowe i nakładki
do osoby korzystającej z urządzenia. DPC może temu zapobiec, dodając parametr
Ograniczenie dotyczące użytkownika DISALLOW_CREATE_WINDOWS
.
Poniższy przykład pokazuje, jak można to zrobić w funkcji
onLockTaskModeEntering()
– wywołanie zwrotne:
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); }
DPC może usunąć to ograniczenie, gdy urządzenie wyjdzie z trybu blokady.
Dodatkowe materiały
Więcej informacji o urządzeniach specjalnych znajdziesz w tych dokumentach:
- Książka kucharska na temat urządzeń specjalnych z dodatkowymi przykładami ograniczającymi na urządzeniach mobilnych i zwiększać wygodę użytkowników.
- Omówienie urządzeń specjalnych zawiera omówienie: urządzeń specjalnych.
- Zarządzanie wieloma użytkownikami – wyjaśnia, jak współużytkować urządzenia: użytkowników.