AlarmManager触发的PendingIntent太快第二次 [英] AlarmManager triggers PendingIntent too soon for the second time

查看:117
本文介绍了AlarmManager触发的PendingIntent太快第二次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样的code:

设定报警:

public void setAlarm()
{
    Calendar Calendar_Object = Calendar.getInstance();

    Calendar_Object.add (Calendar.DAY_OF_YEAR, 1);

    Calendar_Object.set(Calendar.HOUR_OF_DAY, 0);
    Calendar_Object.set(Calendar.MINUTE, 0);
    Calendar_Object.set(Calendar.SECOND, 1);

    Intent myIntent = new Intent(Main.this, AlarmReceiver.class);

    PendingIntent pendingIntent = PendingIntent.getBroadcast(Main.this,
            0, myIntent, PendingIntent.FLAG_CANCEL_CURRENT);

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

    alarmManager.setRepeating(AlarmManager.RTC, Calendar_Object.getTimeInMillis(),1000*60*60*24, pendingIntent);
}

广播接收器:

public class AlarmReceiver extends BroadcastReceiver {

     @Override
     public void onReceive(Context context, Intent intent) {

      Intent myIntent = new Intent(context, NotificationService.class);
      context.startService(myIntent);
    }

} 

该服务:

public class NotificationService extends Service {

private NotificationManager mManager;

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onCreate() {
    super.onCreate();

}

@SuppressWarnings("deprecation")
@Override
public void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);

    mManager = (NotificationManager) this.getApplicationContext()
            .getSystemService( this.getApplicationContext().NOTIFICATION_SERVICE);

    Intent intent1 = new Intent(this.getApplicationContext(), ABC.class);

    Notification notification = new Notification(R.drawable.ic_launcher,
            "xxx", System.currentTimeMillis());

    intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP
            | Intent.FLAG_ACTIVITY_CLEAR_TOP);

    PendingIntent pendingNotificationIntent = PendingIntent.getActivity(
            this.getApplicationContext(), 0, intent1,
            PendingIntent.FLAG_UPDATE_CURRENT);

    notification.flags |= Notification.FLAG_AUTO_CANCEL;

    notification.setLatestEventInfo(this.getApplicationContext(),
            "abc", "xyz",
            pendingNotificationIntent);

    mManager.notify(0, notification);
    }
}

在00:00:01一切设置报警后是完美的,但下一次问题发生。所述的PendingIntent触发像间隔24小时之间6至8倍。我不记得如果时间为每个触发相同的,但我希望它每天一次。什么是错的code?

after setting the alarm at 00:00:01 everything is perfect but the next time the problem is happening. the PendingIntent triggers like 6 to 8 times between the 24 hours interval. I don't remember if the time is the same for each trigger but I want it one time each day. What is wrong with the code?

推荐答案

这将创建一个报警,每天将关闭在00:05,最重要的部分是 AlarmManager.INTERVAL_DAY

This will create an alarm that will go off every day at 00:05, the important part is the AlarmManager.INTERVAL_DAY

Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 5);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
cal.add(Calendar.HOUR, 24);

PendingIntent pi = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);
mgr.cancel(pi);
mgr.setRepeating(AlarmManager.RTC, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);

另外,不要忘记随时取消previous类似的报警,当重新设置一个新的,否则他们都会熄灭,古老的集报警,而新的,见上 mgr.cancel(PI);

这篇关于AlarmManager触发的PendingIntent太快第二次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆