Jak włączyć blokowanie zadań na urządzeniach produkcyjnych Android 5.0

12

To pytanie StackOverflow bada, jak włączyć aplikację właściciela urządzenia, a tym samym tryb kiosku, w podglądzie programisty Androida L. Ponieważ metoda wymaga kompilacji użytkownika systemu Android, rootowania urządzenia i kopiowania pliku XML do głównego systemu plików, nie wydaje się odpowiednia do masowego wdrażania pojedynczego urządzenia z Androidem w firmie.

W jaki sposób aplikacje właściciela urządzenia będą instalowane na produkcyjnych urządzeniach z systemem Android L?

Adrian Cox
źródło
czy spowolniłeś problem?
KOTIOS
Dzięki @Spynet - wydaje się, że jest to najbardziej kompletne podsumowanie rozwiązania.
Adrian Cox
1
spójrz tutaj na dobry przewodnik z src: objectpartners.com/2014/11/04/…
Hayden Thring

Odpowiedzi:

14

( 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");
}
tagy22
źródło
Myślę, że jest to obecnie najlepsza możliwa odpowiedź. Krok NFC pozostaje tajemnicą, ale jest znacznie węższym pytaniem.
Adrian Cox
Próbowałem uruchomić krok NFC, ale nie odniosłem żadnego sukcesu, zacząłem pytanie na ten temat tutaj . Istnieje również funkcja żądania z Google w celu poprawy ekranu przypinanie do użytku kiosku tutaj
tagy22
1

Nie mogę skomentować odpowiedzi, która jest nieco uciążliwa, ale stanowi uzupełnienie odpowiedzi tagy22, której można użyć dpmdo ustawienia właściciela urządzenia. Więcej informacji tutaj .

Troy Patrick
źródło
1
dpmnie wykonałby zadania, jeśli w urządzeniu zostało ustawione konto (takie jak konto Google).
Firelord
Czy w takim przypadku NFC? Miałem wrażenie, że właściciel urządzenia musiał zostać ustawiony przed dodaniem okresu do konta.
Troy Patrick,