2012-04-18 58 views
5

我已经设置了一个重复时间的AlarmManagr。这里是我的方法,通过它,我将它设置:AlarmManager不能在睡眠模式下工作

public void setAlarmManager(Context context, Intent intent) {   
    PendingIntent pendingIntent; 
    pendingIntent = PendingIntent.getService(context, 0, intent, 0);    
    AlarmManager alarmManager = 
     (AlarmManager)context.getSystemService(context.ALARM_SERVICE); 

    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.add(Calendar.SECOND, 10); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
           calendar.getTimeInMillis(), 
           40000, pendingIntent);     
} 

这工作时,我的设备进入睡眠模式的报警停止工作,直到我醒来手动我的设备,除了罚款。唤醒设备后,AlarmManager再次开始工作。

如何让管理员即使在睡眠模式下也能正常运行?

+0

AlarmManager.set(AlarmManager.RTC_WAKEUP,...)对我来说工作得很好,没有尝试过AlarmManager.setRepeating()。也许这是相关的?不知道,只是想我会提 – SteelBytes 2012-04-18 08:56:54

+0

setRepeating只是在一段时间后重复任务。其余的东西都一样 – Reyjohn 2012-04-18 09:05:19

+0

任何人都可以给我一个解决方案吗? – Reyjohn 2012-04-18 10:46:01

回答

6

这是因为您的PendingIntent正在呼叫服务而不是拨打BroadcastReceiver,这意味着设备可以在创建服务之前重新进入睡眠状态。如果您转移到广播接收器,它应“保持清醒状态,直到onReceive完成BroadcastReceiver,这意味着您将有时间获得唤醒锁并开始您的服务。即使你转移到BroadcastReceiver,如果需要10秒以上(这是BroadcastReceiver的限制),你将需要获得唤醒锁,直到完成处理。

这是从AlarmManager的Android文档的第2款采取:

” ......如果你的报警接收器,称为Context.startService(),有可能手机会睡所请求的服务推出之前,为了防止这种情况。 ,您的BroadcastReceiver和Service将需要实施单独的唤醒锁定策略,以确保手机继续运行,直到服务可用。“