Выход из сеанса на устройстве с несколькими пользователями?

10

Существует возможность переключения между пользователями, но нет возможности выйти из сеанса активного пользователя. Фоновые приложения и службы для неактивных пользователей (после входа в систему и отключения) продолжают работать, разряжая батарею.

Я думаю, что единственный способ - перезагрузить устройство, а не войти в систему.

Итак, есть ли способ, которым владелец может заставить последующих неактивных пользователей выйти из своего сеанса? У меня есть права суперпользователя с владельцем android-5.0.2.

Бхарат Г
источник

Ответы:

7

В терминальном приложении на Android введите (требуется root-доступ):

su
am stop-user USER_ID

Например, для гостевого пользователя USER_IDв моем устройстве есть 11команда am stop-user 11.

am stop-user не обрабатывает множественный ввод, поэтому вы должны выполнить команду для каждого вторичного пользователя, которого вы хотите приостановить.

Это немного отличается от перезапуска устройства. Если вы проверите amиспользование, вы увидите,

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

Как уже было сказано, он просто приостанавливает все действия, связанные с этой учетной записью пользователя, поэтому всякий раз, когда предоставляется явный запуск или переключение, сеанс возобновляется, а не начинается с нуля.

Для подтверждения того, что пользователь действительно сделал паузу или не работает, см. Мой ответ для Как узнать текущее имя пользователя / ID из ADB ?

Вкратце, pm list usersили dumpsys activityскажу вам, является ли пользователь RUNNINGили SHUTDOWN. Последняя команда лучше. Если пользовательский сеанс действительно остановлен am stop-user, вы увидите mState=SHUTDOWNэтого пользователя. Однако, если пользователь не был активирован ни разу после перезагрузки, вы не увидите ни одной его записи.

Повелитель огня
источник
как я уже говорил, команда am stopuser 10показала только то, pm list usersчто пользователь не работает. Я проверил adb shell psпосле am stop-user 10и могу найти u10_axxпроцессы запущены. Чтобы проверить, остановлены ли они, я попытался запустить сценарий оболочки в терминале 2-го пользователя. Скрипт повторяет оператор echo каждую секунду (отображая секунду). После запуска этого сценария, использования am stop-user 10команды, ожидания 5 минут и перезапуска второго сеанса пользователя, я могу сказать, что сценарий не остановлен. Это бежало в течение всего времени.
Бхарат Г.
Метод, который я использовал для установки приложений (терминал) во 2-м пользователе Android 5.0.2, является adb install -r app.apk. Не знаю, в этом ли проблема.
Бхарат Г.
Я сообщу вам, если получу что-то релевантное вашим комментариям.
Повелитель огня
1
Я проверил ту же команду на устройстве друга, android-5.1.1и она работала, как указано. Я не проверял часть скрипта, но при выдаче am stop-user 10все процессы 2-го пользователя были убиты и не перечислены в команде Settings > Appsили с psкомандой. Таким образом, это так, но в android-5.0.2настоящее время либо глючит с этой командой, либо, по-моему, такая функциональность не реализована в той версии. Но у 5.1 есть более невыносимые ошибки для меня, чтобы переключиться еще. Спасибо :)
Bharat G