AlarmManager不能按预期运行
问题描述:
正如你建议我使用AlarmManager而不是Timer,我想程序会运行。
但不幸的是,它没有。或者,更好的,并不总是...AlarmManager不能按预期运行
这是我的代码:
long millis = 0;
this.alarmMgr = (AlarmManager)this.main.getSystemService(Context.ALARM_SERVICE);
this.checkPendingIntent = PendingIntent.getBroadcast(this.main, 0,
new Intent(this.main, AlarmReceiver.class), 0);
if(frequency.compareTo("1HOUR") == 0)
millis = 3600 * 1000;
if(frequency.compareTo("12HOUR") == 0)
millis = 12 * 3600 * 1000;
if(frequency.compareTo("1DAY") == 0)
millis = 24 * 3600 * 1000;
if(frequency.compareTo("1WEEK") == 0)
millis = 7 * 24 * 3600 * 1000;
this.alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis(), millis, this.checkPendingIntent);
我期待的是,悬而未决的意图(AlarmReceiver)都会被调用x毫秒,但事实并非如此。
我可以在手机的日志中看到它不会被调用,并且在我的服务器日志中(接收方发送HTTP请求),没有收到请求。很奇怪的是,有时它运行,但我不能再现这种情况。
有人可以说我做错了什么吗?
非常感谢
卢卡Bertoncello
答
这是怎样,如果你想每天重复闹钟使用报警
Calendar now = Calendar.getInstance();
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, yourHour);
calendar.set(Calendar.MINUTE, yourMin);
calendar.set(Calendar.SECOND, youSec);
if (calendar.before(now)) { //if time passed
calendar.add(Calendar.DATE,1);
}
Intent intent = new Intent(Context.this, DestinationActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity
(Settings.this,123456, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY,pendingIntent);
使用setRepeating一个简单的例子。
如果我想知道我使用setAlarm(.. .. .. ..),而不是
答
退房这个 -
Intent intentalarm = new Intent("com.mubble.powercutsensorapp.MYTIMER");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intentalarm, 0);
AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
long now = System.currentTimeMillis();
long interval = 24*60 * 60 * 1000; // 24 hour
manager.setRepeating(AlarmManager.RTC_WAKEUP, now + interval, interval,
pendingIntent);
谢谢,我会尝试。你能解释一下为什么你使用setTimeInMillis作为日历,然后再使用calendar.set? – 2013-04-27 07:13:30
好吧,它似乎工作...我会测试你的例子今天和明天,期待每小时一个请求。非常感谢 – 2013-04-27 10:32:08
@LucaBertoncello您可以设置闹钟,然后更改设置的时间。当警报到来时,警报将被解除。如果您发现我的回答有用,请将它投票并接受为答案 – 2013-04-28 04:39:05