在手机处于睡眠状态时唤醒手机的唯一方法是使用 AlarmManager。没有其他办法(好吧,您可以保持唤醒锁定并防止手机进入睡眠状态,但这会不必要地耗尽电池,并且您的用户会生气)。
因此,您想使用 AlarmManager 安排警报。然后,当警报响起时,您可以检查自己的应用程序是否已经运行并登录(保存此信息是一些静态(ckass)变量)。如果应用程序尚未运行并登录,则什么也不做。
编辑:添加代码示例
创建一个公共静态(类)变量,应用程序中的所有类都可以访问该变量:
public class Globals {
public static boolean applicationIsBusyDoingSomethingUseful = false;
}
在您的应用程序中,每当它正在做一些有用的事情并且不想被您的基于计时器的警报中断或注销时,它应该将此变量设置为“true”并且当它完成其工作并且不再做任何有用的东西都应该将变量重置为“false”:
public void someUsefulWork() {
// set flag while doing useful work
Globals.applicationIsBusyDoingSomethingUseful = true;
// do useful work
// ...
// end of useful work
Globals.applicationIsBusyDoingSomethingUseful = false;
}
在您的 BroadcastReceiver 中,当警报响起时,您可以检查应用程序是否在做任何有用的事情。如果是,您只需忽略警报并等待下一个警报。如果它没有做任何有用的事情,则将用户注销。
public class MyAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Check if application is doing anything useful
if (Globals.applicationIsBusyDoingSomethingUseful) {
// Application is busy working, so ignore this alarm
} else {
// Log the user out or whatever...
}
}
}