Как обнаружить любое взаимодействие с пользователем?

ПРОБЛЕМА БЕЗОПАСНОСТИ: Я не знаю, как это происходит, но читатели этого вопроса приходят к выводу, что решения этой проблемы представляют собой угрозу безопасности. Поэтому, пожалуйста, имейте в виду, что все данные, которые меня интересуют, измеряют время активности пользователя. Это все. Что сделал пользователь -- меня НЕ это вообще не интересует!


Мне нужна очень простая концепция, но я не могу найти решение. Я хотел бы запустить процесс (в фоновом режиме) и прослушивать взаимодействие с пользователем.

Итак, пользователь касается экрана -> мой метод срабатывает.

Пользователь разблокирует телефон --> мой метод срабатывает.

Пользователь печатает на физической клавиатуре --> срабатывает мой метод.

Короче говоря, мой метод НЕ срабатывает, когда телефон все еще лежит на столе :-) Обратите внимание, что взаимодействие происходит со всем телефоном, а не с моим приложением, и меня не интересует, что пользователь набрал букву «К», я меня даже не интересует, что пользователь что-то набрал, меня волнует только то, что пользователь каким-то образом использовал телефон.

Кстати. состояние, когда пользователь идет и слушает музыку (телефон в кармане) -- это НЕ взаимодействие.

То, что я ищу, - это триггер - что-то вроде INTERACTION_DETECTED или (наоборот) метод обратного вызова, который установлен как reportInactiveUser(10*1000), и он будет вызываться, если пользователь неактивен в течение 10 секунд.

ВОПРОС как определить взаимодействие с пользователем?

Цель: измерить время использования телефона вручную.

(отсутствие) ПРОГРЕСС

Я узнал, что BatteryStatsImpl может содержать нужные мне данные. Его экземпляр хранится у BatteryStatsService, который, однако, не дает к нему никакого доступа, только у IBatteryStats, у которого, в свою очередь, есть только один интересный метод -- getStatistics, и в выводе нет счетчиков активности пользователя (или они все нули; я установил все разрешения включены). Так что пока - не повезло.

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


person greenoldman    schedule 02.08.2012    source источник
comment
Вы пробовали смотреть на этот вопрос? stackoverflow.com/questions/3757220 /   -  person maxko87    schedule 02.08.2012
comment
@ maxko87, делаю это сейчас, большое спасибо, выглядит многообещающе!   -  person greenoldman    schedule 02.08.2012
comment
Основной целью разработки Android является не предоставление фоновым задачам информации о том, что делает пользователь, за некоторыми исключениями, когда участие фоновой задачи считается законным.   -  person Chris Stratton    schedule 03.08.2012
comment
@Macias - это не абсурд. Поскольку считается, что у вас нет законной причины знать, что делает пользователь, хуки, которые дали бы вам знать, что они что-то делают (даже не зная, что), немногочисленны, а те, которые действительно существуют, постепенно исчезают. закрыт в новых версиях. Многие приложения, которые зависели от анализа журнала как обходного пути для вещей, противоречащих видению дизайнеров Android, например, были закрыты в JellyBean. Вы не обязаны соглашаться с философией дизайна (вряд ли кто-то соглашается полностью), но идти против нее нелегко.   -  person Chris Stratton    schedule 03.08.2012
comment
Обвинение людей в вещах здесь ни к чему не приведет. Прочитайте свой вопрос еще раз. Вы говорите: пользователь касается экрана --› срабатывает мой метод. Пользователь разблокирует телефон --› срабатывает мой метод. Пользователь печатает на физической клавиатуре --› срабатывает мой метод. Я не тот, кто их придумывает. Я направил вас к библиотекам, которые вы можете использовать для перехвата, и сказал, что вы можете использовать их только в контексте приложения. Теперь ты возвращаешься, утверждая, что ничего этого не хотел, а я воображаю вещи в своем собственном мире. Люди здесь пытаются помочь вам, говоря, что вы не можете сделать.   -  person Erol    schedule 03.08.2012
comment
Кроме того, экранная заставка — это не то, что вам нужно. Кроме того, в Android нет хранителя экрана, у него есть экран блокировки, и если вы хотите создать собственный, это называется хак. Таким образом, Android НИ В КОЕМ СЛУЧАЕ не предоставляет вам официальных средств для перехвата любого типа действий пользователя, которые вы хотите вне контекста приложения. После этого момента вы сами по себе, потому что вы слишком упрямы, чтобы принять помощь, которую люди предлагают вам, и вместо этого принимаете их за тупых... Удачи вам в вашем бесконечном путешествии.   -  person Erol    schedule 03.08.2012
comment
@baba tenor, да, вы представляете вещи - весь вопрос имеет значение. И я прямо написал, что меня не интересует, набрал ли пользователь K или даже набрал ли пользователь что-либо. Все, что имеет значение, это факт, что пользователь взаимодействовал с телефоном, поэтому любой вид взаимодействия (телефон разблокирован, касание экрана, ввод текста) должен запускать мой метод.   -  person greenoldman    schedule 03.08.2012
comment
Я не помогаю тому, кто переворачивает ситуацию, чтобы обвинить людей, которые пытаются ему помочь. Удачи в вашем путешествии, macias, надеюсь, вы найдете помощь в этом отношении. Неудивительно, что вы не получили никаких ответов на свой вопрос, кроме моего.   -  person Erol    schedule 03.08.2012
comment
@greenoldman: Привет .. Вы нашли какое-нибудь решение для этого ??   -  person Aada    schedule 10.04.2013


Ответы (1)


Для этого вы хотите перехватить физическое взаимодействие с телефоном.

Для касаний экрана пригодится этот пакет. *Вы можете использовать это для прослушивания жестов на экране.

Что касается касаний физических кнопок, я предлагаю вам взглянуть на это.

person Erol    schedule 02.08.2012
comment
Я не думаю, что вы сможете обнаружить это без вашего приложения, работающего в фоновом режиме, или собственной службы. В противном случае это была бы очень подходящая среда для управления телефоном, а вы этого не хотите. - person Erol; 03.08.2012
comment
Нет, угроза безопасности связана не с тем, что пользователь играет с телефоном, а с разработанным вами приложением, которое берет под свой контроль действия, которые вы выполняете вне своего приложения. Как бы вы приветствовали это, если бы у меня было приложение на вашем телефоне, которое перехватывало бы каждое касание аппаратной клавиши и автоматически подключало вас к моему спам-сайту. Вы могли бы обнаружить это вредоносное поведение, если бы оно происходило, когда вы использовали мое приложение, но если поблизости нет приложения, и я все еще могу читать ваши общесистемные жесты и копать вашу дыру в фоновом режиме, как вы определите угроза? - person Erol; 03.08.2012
comment
Короче говоря, как вы уже указали, ваш подход не может работать из-за соображений безопасности. Если я ошибаюсь, пожалуйста, поправьте меня. - person greenoldman; 03.08.2012