报警管理器不能按时工作

时间:2015-06-16 19:31:52

标签: android alarmmanager

我有这种方法应该安排警报但是当时间到来时它不会启动pendingintent吗?

public void setAlarm(String name, long time) {
    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    Intent dialog = new Intent(this, SubActivity.class);
    dialog.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    PendingIntent pi = PendingIntent.getActivity(this, 0, dialog, 0);

    if (Build.VERSION.SDK_INT >= 19) {
        if (System.currentTimeMillis() < time) {
            am.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, time, pi);
        }else{
            time+=(AlarmManager.INTERVAL_DAY*7);
            am.setExact(AlarmManager.RTC_WAKEUP, time, pi);
        }
    } else {
        am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, time, AlarmManager.INTERVAL_DAY * 7, pi);
    }
}

1 个答案:

答案 0 :(得分:2)

问题是您使用PendingIntent Activity,这不一定会让设备保持足够长的时间以使Activity开始使用。您必须使用PendingIntent BroadcastReceiver来利用唤醒锁定以保持设备清醒,直到您的应用代码可以运行。 WakefulBrodcastReceiver是一个不错的选择,或者您可以根据需要自行推出。有关如何使用警报唤醒设备的说明和示例,请参阅此文章:http://po.st/7UpipA