2013-06-28 2 views
0

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

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

Может ли кто-нибудь помочь мне с этим, пожалуйста?

Спасибо!

+0

Зачем вы хотите это сделать?Вы просто хотите инициировать событие с помощью аппаратных кнопок, когда ваше приложение закрыто? Если это так, я нашел хакерское решение, но оно работает только для кнопки питания. – eski

+0

Кнопка питания также подходит для меня. что-то вроде Если я отжимаю кнопку увеличения 5 раз вверх, я хотел бы вызвать какой-то процесс с моим приложением. – TheDevMan

ответ

1

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

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


Зарегистрировать BroadcastReceiver или Услугу получить намерения со следующим IntentFilter:

IntentFilter f = new IntentFilter(); 
f.addAction(Intent.ACTION_SCREEN_ON); 
f.addAction(Intent.ACTION_SCREEN_OFF); 

Когда Намерение принимается использование

System.currentTimeMillis() 

, чтобы получить временную метку, что это намерение было получено.

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

После нажатия кнопки питания проверьте, что текущее нажатие не произошло слишком долго после предыдущего. Если это так, перезапустите число нажатий, которые произошли (с помощью SharedPreferences снова).

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


Вот код, у меня есть для приемника: https://github.com/eskimoapps/count_stuff/blob/master/Receiver.java

Это не очень хорошо и с первого приложения я опубликовал давно. Если я когда-нибудь обойдусь, я перепишу его и поставлю все на GitHub.

Если вы хотите увидеть его в действии здесь магазин список:

https://play.google.com/store/apps/details?id=count.stuff&hl=en

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