Wylogowanie sesji na urządzeniu z wieloma użytkownikami?

10

Istnieje opcja przełączania się między użytkownikami, ale nie ma opcji wylogowania się z aktywnej sesji użytkownika. Aplikacje i usługi w tle dla nieaktywnych użytkowników (po zalogowaniu i wylogowaniu) nadal działają w celu rozładowania baterii.

Myślę, że jedynym sposobem jest ponowne uruchomienie urządzenia i nie zalogowanie użytkownika.

Czy istnieje więc sposób, w jaki właściciel może zmusić kolejnych nieaktywnych użytkowników do wylogowania się z sesji? Mam dostęp administratora do właściciela za pomocą android-5.0.2.

Bharat G.
źródło

Odpowiedzi:

7

W aplikacji terminalowej na Androida wpisz (wymaga dostępu do konta root):

su
am stop-user USER_ID

Np. Dla użytkownika gościa jest on USER_IDw moim urządzeniu 11tak, że polecenie byłoby am stop-user 11.

am stop-user nie przetwarza wielu danych wejściowych, dlatego musisz wykonać polecenie dla każdego dodatkowego użytkownika, którego chcesz wstrzymać.

To trochę różni się od ponownego uruchomienia urządzenia. Jeśli zaznaczysz amużycie, zobaczysz,

am stop-user: stop execution of USER_ID, not allowing it to run any code until a later explicit start or switch to it.

Jak powiedziano, po prostu wstrzymuje wszystkie działania powiązane z tym kontem użytkownika, więc za każdym razem, gdy zapewnione jest wyraźne rozpoczęcie lub zmiana sesji, sesja zostanie wznowiona, a nie od zera.

Aby potwierdzić, że użytkownik rzeczywiście się zatrzymał lub nie działa, zobacz moją odpowiedź na temat Jak znaleźć aktualnie uruchomioną nazwę / identyfikator użytkownika z ADB ?

W skrócie, pm list userslub dumpsys activitypowiedziałbym, czy użytkownik jest RUNNINGlub SHUTDOWN. To drugie polecenie jest lepsze. Jeśli sesja użytkownika rzeczywiście zostanie zatrzymana am stop-user, zobaczysz mState=SHUTDOWNtego użytkownika. Jeśli jednak użytkownik nie został aktywowany ani razu od momentu ponownego uruchomienia, nie zobaczysz żadnego z jego wpisów.

Firelord
źródło
tak jak powiedziałem, am stopuser 10wyświetlał pm list userspolecenie tylko jako użytkownik nie działa. Sprawdziłem adb shell pspóźniej am stop-user 10i mogę znaleźć u10_axxuruchomione procesy. Aby sprawdzić, czy są zatrzymane, próbowałem uruchomić skrypt powłoki w terminalu na drugim użytkowniku. Skrypt zapętla instrukcję echa co sekundę (wyświetlając sekundę). Po uruchomieniu tego skryptu, użyciu am stop-user 10polecenia, odczekaniu 5 minut i ponownym uruchomieniu drugiej sesji użytkownika, mogę powiedzieć, że skrypt nie został zatrzymany. Działał przez cały czas.
Bharat G
Metodą, której użyłem do instalowania aplikacji (terminala) w drugim użytkowniku Androida 5.0.2 jest adb install -r app.apk. Nie wiem, czy to jest problem.
Bharat G
Zaktualizuję cię, jeśli otrzymam coś istotnego do twoich komentarzy.
Firelord
1
Sprawdziłem to samo polecenie na urządzeniu znajomego android-5.1.1i działało jak podano. Nie sprawdziłem części skryptu, ale po wydaniu am stop-user 10wszystkie procesy drugiego użytkownika zostały zabite i nie są wymienione w poleceniu Settings > Appslub z pspoleceniem. Tak jest, ale android-5.0.2obecnie jest albo błędny z tym poleceniem, albo taka funkcjonalność nie jest zaimplementowana od tej wersji, jak sądzę. Ale 5.1 ma jeszcze więcej niedopuszczalnych błędów, które mogę zmienić. Dziękuję :)
Bharat G