Android设置多个定时器时只有最后一个有效的问题解决

来源:互联网 发布:linux usb驱动开发 编辑:程序博客网 时间:2024/05/22 00:48

先看这段API:


我们会用到PendingIntent 来获取一个实例它有四个参数:

PendingIntent  pi = PendingIntent.getBroadcast(context, requestCode, intent, flags)

content 和 intent 比较熟悉,不必多说

主要是flag,它有以下参数:

FLAG_CANCEL_CURRENT:如果当前系统中已经存在一个相同的PendingIntent对象,那么就将先将已有的PendingIntent取消,然后重新生成一个PendingIntent对象。

FLAG_NO_CREATE:如果当前系统中不存在相同的PendingIntent对象,系统将不会创建该PendingIntent对象而是直接返回null。

FLAG_ONE_SHOT:该PendingIntent只作用一次,如果该PendingIntent对象已经触发过一次,那么下次再获取该PendingIntent并且再触发时,系统将会返回一个SendIntentException,在使用这个标志的时候一定要注意哦。

FLAG_UPDATE_CURRENT:如果系统中已存在该PendingIntent对象,那么系统将保留该PendingIntent对象,但是会使用新的Intent来更新之前PendingIntent中的Intent对象数据,例如更新Intent中的Extras。这个非常有用,例如之前提到的,我们需要在每次更新之后更新Intent中的Extras数据,达到在不同时机传递给MainActivity不同的参数,实现不同的效果。

最终我的代码改成这样解决了问题:

if(cur.moveToLast()) {ID = cur.getInt(0);}//实例化PendingIntentfinal PendingIntent pi = PendingIntent.getBroadcast(Main_Message.this, ID, intent, PendingIntent.FLAG_UPDATE_CURRENT);//获得系统时间final long time1 = System.currentTimeMillis();Calendar c = Calendar.getInstance();c.set(m_Year, m_Mouth, m_Day, m_Hour, m_Minute);//得到long time2 = c.getTimeInMillis();if(flag && (time2 - time1)>0 && ON_OFF==1) {am.set(AlarmManager.RTC_WAKEUP, time2, pi);} else {am.cancel(pi);}


原创粉丝点击