每当我锁定屏幕时 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);
}
所以我正在制作一个应用程序,当您按下锁定按钮两次时它会发送一条消息,但是当我 运行 该应用程序并检查日志时,屏幕关闭在日志中显示了三次。由于 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);
}