Как я могу создать двойной или трижды прослушиватель ключа питания?

#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 щелчка) каждый раз