我正在创建一个接收电源按钮按下的接收器,现在它可以工作,但它的行为不像我想要的那样。如果用户在不到 5 秒的时间内按下 5 次,则它定义为执行某些操作,但目前它的响应速度不快,有时需要超过 5 次按下,因此接收器执行指定的操作。
有人可以告诉我如何改进我的代码谢谢
这是我的 Receiver.class:
public class Receiver extends BroadcastReceiver {
public boolean successfull = false;
public boolean test = false;
int presses;
long time;
SharedPreferences prefs;
private Context context;
@Override
public void onReceive(Context context, Intent intent) {
AudioManager manager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
if (manager.getMode() != AudioManager.MODE_IN_CALL) {
this.context = context;
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF) || intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
calculationLogic();
}
}
}
public void calculationLogic() {
prefs = context.getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE);
presses = prefs.getInt("repeats", 0);
Log.d("--", "Power pressed, #presses: " + presses);
Log.d("--", "time " + System.currentTimeMillis());
// screenOff = true;
time = System.currentTimeMillis();
//saving initial power btn press
if (prefs.getLong("time", 0) == 0) {
Log.d("receiver", "40");
prefs.edit().putLong("time", time).apply();
presses += 1;
} else {
Log.d("receiver", "44");
//calculate the difference between the first power press and current power press
Log.d("--", "time diff = " + time + " - " + prefs.getLong("time", 0) + " = " + (time - prefs.getLong("time", 0)));
if (time - prefs.getLong("time", 0) > 5000) {
reset();
if (test) {
vibrate();
((IntroActivity) context).onBackPressed();
((IntroActivity) context).showTestSuccess(successfull);
context.unregisterReceiver(this);
}
Log.d("receiver", "fail");
} else {
if (presses == 5) {
Log.d("receiver", "success");
reset();
successfull = true;
Log.d("--", "staring activity");
vibrate();
//TODO
if (!test) {
doAction(context);
} else {
((IntroActivity) context).onBackPressed();
((IntroActivity) context).showTestSuccess(successfull);
context.unregisterReceiver(this);
}
time = 0;
} else {
presses += 1;
Log.d("receiver", "presses so far " + presses);
}
}
}
prefs.edit().putInt("repeats", presses).apply();
}
private void reset() {
presses = 0;
prefs.edit().remove("time").apply();
}
private void vibrate() {
Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(200);
}
private void doAction(Context context) {
Log.d("receiver", "STARTING main");
Intent i = new Intent();
i.setClass(context, SplashActivity.class);
// i.setClassName("com.emergencyapp", ".SplashActivity");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}