0

正如你建议我使用 AlarmManager 而不是 Timer,我想,程序会运行。
但不幸的是,事实并非如此。或者,更好的是,并不总是...

这是我的代码:

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

我希望每 X 毫秒调用一次未决意图 (AlarmReceiver),但事实并非如此。
我可以在我的手机日志中看到它不会被调用,并且在我的服务器的日志中(接收方发送一个 HTTP 请求),没有收到任何请求。

非常奇怪的是,它有时会运行,但我无法重现这种情况。

有人可以说我在做什么错吗?

非常感谢
Luca Bertoncello

4

2 回答 2

0

这是一个如何使用警报的简单示例

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(..,..,..,..) 代替

于 2013-04-27T07:10:47.120 回答
0

看看这个-

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); 
于 2013-04-27T10:24:53.343 回答