( Edycja: zaktualizowano po kilku dalszych testach)
Sprawdź najnowszą dokumentację .
Ta funkcja nazywa się teraz przypinaniem ekranu, a aplikacja nie musi być właścicielem urządzenia. Jeśli właściciel urządzenia nie jest ustawiony, użytkownik zostanie poproszony o zaakceptowanie. Ale są z tym problemy związane z używaniem kiosku, wymienione poniżej.
Istnieją dwa sposoby aktywacji przypinania ekranu:
Ręcznie: użytkownicy mogą włączyć przypinanie ekranu w Ustawieniach> Zabezpieczenia> Przypinanie ekranu i wybierz zadania, które chcą przypiąć, dotykając zielonej ikony przypinania na ostatnim ekranie. Programowo: Aby programowo aktywować przypinanie ekranu, należy wywołać startLockTask () z aplikacji. Jeśli żądająca aplikacja nie jest właścicielem urządzenia, użytkownik jest monitowany o potwierdzenie. Aplikacja właściciela urządzenia może wywoływać metodę setLockTaskPackages (), aby umożliwić aplikacjom możliwość przypięcia bez kroku potwierdzenia użytkownika.
Jeśli aktywujesz przypinanie ekranu programowo (aplikacja nie będąca właścicielem urządzenia) lub na urządzeniu za pomocą pinezki w ostatnich, otrzymasz następujące zachowanie:
Zostanie wyświetlone okno dialogowe z pytaniem użytkownika, czy chce włączyć przypinanie ekranu i czy wymaga hasła do wyjścia. Jeśli naciśnie Tak, pasek stanu i powiadomienia znikną, przyciski powrotu, powrotu i powrotu nie znikną. Stuknięcie w dom lub ostatnio powoduje pojawienie się toastu informującego użytkownika, jak wyjść z przypinania ekranu.
Użytkownik może następnie przytrzymać i cofnąć się, aby wyjść z ekranu przypinanego. Jeśli użytkownik wybierze żądanie hasła, zostanie wyrzucony bezpośrednio do ekranu blokady. To zachowanie oznacza, że nie jest odpowiednie dla kiosku imo. Ponieważ użytkownikom kiosku zbyt łatwo jest spojrzeć na ekran blokady.
Aby uzyskać odpowiedni tryb kiosku, musimy ustawić właściciela urządzenia. Dokumentacja Google mówi, że musisz to zrobić za pomocą NFC:
Aby wdrożyć i aktywować właściciela urządzenia, należy wykonać transfer danych NFC z aplikacji programistycznej do urządzenia, gdy urządzenie jest w stanie nieuprawnionym.
Używanie do tego NFC wydaje się nieco skomplikowane (co jeśli urządzenie nie ma NFC?). Nie zbadałem tego jeszcze, więc czy ktoś może podać informacje na temat ustawiania właściciela urządzenia przez NFC? Który teraz staje się głównym punktem twojego pytania. (tj. ustawienie właściciela urządzenia na urządzeniu niezrootowanym)
Ale aby potwierdzić, że zachowanie jest zgodne z oczekiwaniami, jeśli zrootujesz urządzenie, możesz ustawić właściciela urządzenia zgodnie z wcześniejszymi instrukcjami Google (dodając device_owner.xml), jak wspomniałem tutaj
Teraz możesz poprawnie zablokować aplikację, nie pojawi się okno dialogowe do zaakceptowania przez użytkownika, gdy włączone, ostatnie przyciski i przycisk Home znikną, a użytkownik nie będzie mógł opuścić aplikacji, dopóki aplikacja się nie odblokuje. Właściwy tryb kiosku. Przetestowałem to na Nexusie 7 2013 z najnowszą wersją Lollipopa.
Następujący fragment kodu włącza blokadę:
mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
mDeviceAdminSample = new ComponentName(this, DeviceAdminSample.class);
if (mDPM.isDeviceOwnerApp(this.getPackageName())) {
Log.d(TAG, "isDeviceOwnerApp: YES");
String[] packages = {this.getPackageName()};
mDPM.setLockTaskPackages(mDeviceAdminSample, packages);
} else {
Log.d(TAG, "isDeviceOwnerApp: NO");
}
if (mDPM.isLockTaskPermitted(this.getPackageName())) {
Log.d(TAG, "isLockTaskPermitted: ALLOWED");
startLockTask();
} else {
Log.d(TAG, "isLockTaskPermitted: NOT ALLOWED");
}