我尝试在我的应用程序中执行闹钟,但是当手机锁定时,活动不会像标准闹钟那样启动。我能做些什么来决定这个问题?
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 5);
Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,
12345, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am =
(AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
pendingIntent);
答案 0 :(得分:2)
在这种情况下,这是“正常”行为。
要克服它,您需要获取CPU的wake_lock。
只要警报接收器的onReceive()方法正在执行,警报管理器就会保持CPU唤醒锁定。这可以保证在您完成广播处理之后手机不会睡眠。一旦onReceive()返回,Alarm Manager就会释放此唤醒锁定。 这意味着手机在某些情况下会在您的onReceive()方法完成后立即进入睡眠状态。如果您的闹钟接收器调用了Context.startService(),手机可能会先睡眠启动请求的服务。为防止这种情况发生,您的BroadcastReceiver和服务需要实施单独的唤醒锁定策略,以确保手机继续运行,直到服务可用。
来自:http://developer.android.com/reference/android/app/AlarmManager.html
类似问题:https://groups.google.com/forum/#!topic/android-developers/RAg9LJmH1oo
这就是您所需要的:http://developer.android.com/reference/android/os/PowerManager.WakeLock.html