#android
#Android
Вопрос:
У меня вопрос ко всем вам! Есть ли какой-либо способ определить, была ли нажата клавиша питания два или три раза.
Вот мой код для определения нажатия клавиши питания:
public class Receiver extends BroadcastReceiver {
public static boolean wasScreenOn = true;
@Override
public void onReceive(final Context context, final Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
Log.e("iufehthrhhrhyigy", "dhytfwsthrytfy.");
wasScreenOn = false;
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
Log.e("iufyigy", "dhytfytfy.");
wasScreenOn = true;
}
Комментарии:
1. возьмите статическую переменную в качестве счетчика и увеличьте счетчик. а также вам нужно увеличить промежуток времени, например, 1 сек или меньше.
2. я сделал это, но не работает
3. Почему бы и нет? Пожалуйста, покажите свой код.
4. Я не вижу никакого счетчика в вашем коде
5. не могли бы вы объяснить, пожалуйста
Ответ №1:
Создайте свой класс BroadcastReceiver следующим образом:
public class MyBroadCastReciever extends BroadcastReceiver {
private int count = 0;
private long last_click = 0;
@Override
public void onReceive(Context context, Intent intent) {
if ((System.currentTimeMillis() - last_click) > 1000) { // I'm counting only number of presses in one second. You can adjust it.
count = 1;
} else {
count ;
Log.d("Log", "count: " count);
if (count == 2) {
Log.d("Log", "Pressed two times");
}
if (count == 3) {
Log.d("Log", "Pressed three times");
}
if (count == 4) {
Log.d("Log", "Pressed four times");
}
// and so on... byw, you better use switch statement here
return;
}
last_click = System.currentTimeMillis();
}
}
Создайте объект этого получателя и зарегистрируйте его следующим образом:
MyBroadCastReciever myBroadCastReciever = new MyBroadCastReciever();
IntentFilter screenStateFilter = new IntentFilter();
screenStateFilter.addAction(Intent.ACTION_SCREEN_ON);
screenStateFilter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(myBroadCastReciever, screenStateFilter);
И не забудьте отменить регистрацию, когда закончите:
unregisterReceiver(myBroadCastReciever);
Я проверил это сам. В моем случае это работает. Надеюсь, это вам тоже поможет!
Комментарии:
1. спасибо, что он работает, но он не улавливает (3 щелчка) каждый раз