每当我锁定屏幕时 BroadcastReceiver 得到 3 ACTION_SCREEN_OFFs 而只有 1 ACTION_SCREEN_ON

BroadcastReceiver gets 3 ACTION_SCREEN_OFFs whenever I lock the screen and only 1 ACTION_SCREEN_ON

所以我正在制作一个应用程序,当您按下锁定按钮两次时它会发送一条消息,但是当我 运行 该应用程序并检查日志时,屏幕关闭在日志中显示了三次。由于 SCREEN OFF 显示三次,这意味着计数器增加了三次,因此如果您的 phone 已解锁,则只需按一次即可发送消息。这是为什么?

if (intent.getAction() == Intent.ACTION_SCREEN_OFF)
    {
        Log.d("IT WORKED", "SCREEN OFF");
        if (listen == true)
            counter++;
    }

    else
    {
        if (listen == true)
            counter++;
        Log.d("IT WORKED", "SCREEN ON");
    }
//when counter == 2 (2 lock button presses) send message

根据我的实验,这有效并且只给你两个计数

int counter = 0;
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action != null) {
            switch (action) {
                case Intent.ACTION_SCREEN_OFF:
                    counter++;
                    break;
                case Intent.ACTION_SCREEN_ON:
                    counter++;
                    break;
            }
        }
        Log.i(TAG, "onReceive: " + counter);
    }
};

@Override
protected void onStart() {
    super.onStart();
    IntentFilter intentFilter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
    intentFilter.addAction(Intent.ACTION_SCREEN_ON);
    registerReceiver(mBroadcastReceiver, intentFilter);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(mBroadcastReceiver);
}