Android屏幕打开和关闭使用电源按钮处理

时间:2017-04-21 09:48:19

标签: android android-studio broadcastreceiver android-broadcastreceiver

我试图检测电源按钮是否在4秒内按下三次。下面的代码不起作用。

public class PowerButtonReceiver extends BroadcastReceiver{

    static int count = 0;
    long initialTime,finishTime;

    @Override
    public void onReceive(final Context context, Intent intent) {

        Log.v("onReceive", "Power button is pressed.");
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            if (count == 0){
                initialTime = System.currentTimeMillis();
            }
            count++;
            if (count == 3){
                finishTime = System.currentTimeMillis();

                if (finishTime - initialTime <= 4000){
                    Toast.makeText(context, "POWER BUTTON CLICKED 3 TIMES", Toast.LENGTH_LONG).show();
                    count = 0;
                }
            }

        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {

            if (count == 0){
                initialTime = System.currentTimeMillis();
            }
            count++;
            if (count == 3){
                finishTime = System.currentTimeMillis();

                if (finishTime - initialTime <= 4000){
                    Toast.makeText(context, "POWER BUTTON CLICKED 3 TIMES", Toast.LENGTH_LONG).show();
                    count = 0;
                }
            }
        }
    }
  }

代码执行时没有错误,也没有显示toast

1 个答案:

答案 0 :(得分:1)

  1. 希望您动态注册接收器 ACTION_SCREEN_OFF -
      

    您无法通过清单中声明的​​组件获得此信息,......

  2. 以下情况除外:

    if (finishTime - initialTime <= 4000){ Toast.makeText(context, "POWER BUTTON CLICKED 3 TIMES", Toast.LENGTH_LONG).show(); count = 0; }

  3. 没有其他任何东西重新将计数分配给0,所以如果你错过了一次敬酒......计数器在一次运行中没有重置为0,并且<=4000条件的以下事件不会被取消输入if,如果大于3,可能应该将count重新分配给0(?)

    1. 如果您的点播在点击期间出现屏幕关闭时会发生什么 - 不要认为它会可见
    2. 应考虑使用||替换if-else,如果您只想检测电源按钮事件而不管屏幕关闭或打开,则效果会更好;喜欢:

      if(intent.getAction()。equals(Intent.ACTION_SCREEN_OFF) || intent.getAction()。equals(Intent.ACTION_SCREEN_ON)){...

    3. 如果1.不是问题,目前您的代码似乎很好,它是2和3的组合。 4.只是一个建议