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
я бы перечислил чужое приложение, чтобы избежать саморекламы, но я не знаю никаких других приложений, которые сделай это.
Зачем вы хотите это сделать?Вы просто хотите инициировать событие с помощью аппаратных кнопок, когда ваше приложение закрыто? Если это так, я нашел хакерское решение, но оно работает только для кнопки питания. – eski
Кнопка питания также подходит для меня. что-то вроде Если я отжимаю кнопку увеличения 5 раз вверх, я хотел бы вызвать какой-то процесс с моим приложением. – TheDevMan