我试图检测电源按钮是否在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
答案 0 :(得分:1)
您无法通过清单中声明的组件获得此信息,......
以下情况除外:
if (finishTime - initialTime <= 4000){
Toast.makeText(context, "POWER BUTTON CLICKED 3 TIMES",
Toast.LENGTH_LONG).show();
count = 0;
}
没有其他任何东西重新将计数分配给0,所以如果你错过了一次敬酒......计数器在一次运行中没有重置为0,并且<=4000
条件的以下事件不会被取消输入if
,如果大于3,可能应该将count重新分配给0(?)
应考虑使用||
替换if-else,如果您只想检测电源按钮事件而不管屏幕关闭或打开,则效果会更好;喜欢:
if(intent.getAction()。equals(Intent.ACTION_SCREEN_OFF) || intent.getAction()。equals(Intent.ACTION_SCREEN_ON)){...
如果1.不是问题,目前您的代码似乎很好,它是2和3的组合。 4.只是一个建议