睡眠时唤醒手机的唯一方法是使用AlarmManager。没有其他的方式(好吧,你可以保持唤醒锁,并防止手机进入睡眠状态,但这会不必要地耗尽电池,用户会生气)。
所以你想使用AlarmManager安排一个警报。然后,当警报关闭时,您可以检查自己是否应用程序已在运行并已登录(保存此信息是一些静态(ckass)变量)。如果应用程序尚未运行并已登录,则无需执行任何操作。
编辑:添加代码示例
创建可由所有类的应用程序中访问的公共静态(类)变量:
public class Globals {
public static boolean applicationIsBusyDoingSomethingUseful = false;
}
在您的应用程序,只要它是做一些有用的事情,不想被基于计时器的警报中断或注销,它应该将此变量设置为“true”,并且当它完成其工作并且不再有用时,它应该重置变量到“假”:
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...
}
}
}
奇怪的请求,你可能想要添加更多你正在尝试做的事情,因为恐怕这仍然像是一个AlarmManager的工作。您可以使用启动意图重置警报,以便异议无效。你的建议存在的问题是你需要一些像警报管理员那样的服务,但不是那种警报管理员。听起来像是更多的努力,然后它是值得的。也许使用管理器,但检查应用程序是否正在运行? – Nanne