Android: определить, перестал ли пользователь использовать свой телефон на некоторое время

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

  1. Если пользователь какое-то время (например, 1 минуту) не касался своего экрана и аудиосистема неактивна*, скорее всего, он перестал пользоваться телефоном и занялся чем-то другим. На мой взгляд, это должно быть достаточно надежно, но я не уверен, что это реализуемо. Это?
  2. Почти как способ № 1, но на этот раз, если экран некоторое время был выключен. Это должно быть реализовано с помощью широковещательных приемников (ACTION_SCREEN_OFF: сэкономить время; ACTION_SCREEN_ON: отметить, если now - saved_time > 1 min). Я прав?
  3. Телефон некоторое время не двигался. Однако это не распространяется на случаи, когда пользователь кладет телефон в карман. Так что это, возможно, будет надежным только в сочетании с чем-то еще.

Сталкивались ли вы с другими способами реализации этого варианта использования? А вы сталкиваетесь с конкретными идеями реализации? Какие проблемы вы видите в упомянутых методах? Заранее спасибо!


*Потому что иначе он мог бы слушать музыку или смотреть видео. Как насчет отключенных видео?


person flxapps    schedule 26.03.2015    source источник


Ответы (2)


Думаю, я бы начал с метода, указанного здесь: Время простоя приложения

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

К сожалению, это все еще оставляет ваш крайний случай приглушенного видео: эта часть немного сложнее, потому что нет трансляции для воспроизведения видео. Вы можете использовать свой метод, который вы упомянули, чтобы проверить, выключен ли экран какое-то время (видео не может воспроизводиться), но тогда у вас есть пограничный случай, когда у пользователя очень долгое время ожидания экрана, поэтому даже когда видео не t воспроизведение экрана может продолжаться в течение 10 минут.

Вы можете использовать ActivityManager, чтобы увидеть, какие процессы происходят на устройстве, так что, возможно, это может быть вам полезно? Я не думаю, что охватил все, но я надеюсь, что это может быть чем-то полезно.

person Patrick Grayson    schedule 26.03.2015

У вас должно быть несколько слушателей и приемников.

Например, NetworkReceiver, который меняется для изменения соединения. Проверить, был ли телефонный звонок принят или принят (и перехвачен).

Проверьте, был ли экран включен/выключен и/или было ли установлено/удалено приложение.

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

Вы можете дать приложению разрешения на перехват ключевых вводов / фокусов на дисплее и т. Д. (AccessibilityService)

После того, как это будет сделано, вы можете записать с помощью общих настроек последнюю временную метку и сбросить AlarmManager.

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

person Emanuel S    schedule 26.03.2015