ПРОБЛЕМА БЕЗОПАСНОСТИ: Я не знаю, как это происходит, но читатели этого вопроса приходят к выводу, что решения этой проблемы представляют собой угрозу безопасности. Поэтому, пожалуйста, имейте в виду, что все данные, которые меня интересуют, измеряют время активности пользователя. Это все. Что сделал пользователь -- меня НЕ это вообще не интересует!
Мне нужна очень простая концепция, но я не могу найти решение. Я хотел бы запустить процесс (в фоновом режиме) и прослушивать взаимодействие с пользователем.
Итак, пользователь касается экрана -> мой метод срабатывает.
Пользователь разблокирует телефон --> мой метод срабатывает.
Пользователь печатает на физической клавиатуре --> срабатывает мой метод.
Короче говоря, мой метод НЕ срабатывает, когда телефон все еще лежит на столе :-) Обратите внимание, что взаимодействие происходит со всем телефоном, а не с моим приложением, и меня не интересует, что пользователь набрал букву «К», я меня даже не интересует, что пользователь что-то набрал, меня волнует только то, что пользователь каким-то образом использовал телефон.
Кстати. состояние, когда пользователь идет и слушает музыку (телефон в кармане) -- это НЕ взаимодействие.
То, что я ищу, - это триггер - что-то вроде INTERACTION_DETECTED
или (наоборот) метод обратного вызова, который установлен как reportInactiveUser(10*1000)
, и он будет вызываться, если пользователь неактивен в течение 10 секунд.
ВОПРОС как определить взаимодействие с пользователем?
Цель: измерить время использования телефона вручную.
(отсутствие) ПРОГРЕСС
Я узнал, что BatteryStatsImpl
может содержать нужные мне данные. Его экземпляр хранится у BatteryStatsService
, который, однако, не дает к нему никакого доступа, только у IBatteryStats
, у которого, в свою очередь, есть только один интересный метод -- getStatistics
, и в выводе нет счетчиков активности пользователя (или они все нули; я установил все разрешения включены). Так что пока - не повезло.
Все вызовы должны быть сделаны путем отражения, потому что эти классы в любом случае недоступны ;-).