0

我尝试在我的应用程序中做闹钟,但是当有电话锁时,活动不会像标准闹钟那样开始。我能做些什么来决定这个问题?

    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);
4

1 回答 1

2

在这种情况下,这是“正常”行为。

要克服它,您需要获取 CPU 的唤醒锁。

只要警报接收器的 onReceive() 方法正在执行,警报管理器就会持有 CPU 唤醒锁。这保证了在您完成广播处理之前手机不会休眠。一旦 onReceive() 返回,警报管理器就会释放这个唤醒锁。这意味着在某些情况下,一旦您的 onReceive() 方法完成,手机就会进入睡眠状态。如果您的警报接收器调用了 Context.startService(),则手机可能会在请求的服务启动之前休眠。为防止这种情况,您的 BroadcastReceiver 和 Service将需要实施单独的唤醒锁定策略,以确保手机继续运行直到服务可用。

这是来自: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

从广播接收器获取唤醒锁的问题

于 2013-08-26T20:07:29.550 回答