Liuser 2011-06-14
这两天一直在处理一个问题。。。他环绕我两天了。介于此有必要给予一记!好了,先说说遇
到我的问题。正如标题所说,给一个alarm设置多个闹钟。。。我遇到的问题思想与这个很类似,听我慢慢说来!(如果你是大牛,那就算了省得浪费你的时间,我只是再为那些遇到问题的新手做一个指引!大牛就路过吧~~~~)。
我们知道设置alarm要设置alarm中的pendingintent,因为alarm对象是系统中的同一个对象,但是系统是怎么区别alarm呢?
贴出伪代码:
Intent intent = new Intent(); PendingIntent pendingIntent = PendingIntent.getBroadCast(Context,requestCode,Intent,Flags); AlarmManager alarm = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); alarm.set(AlarmManager.RTC,longTime,PendingIntent);
可以看到上面的代码,观察一下,pendingintent依赖于intent。。。我们可以在
PendingIntent中定义我们所关注的事件,如果你想关注一个acitivty。。那么你就
可以通过pendingIntent的getActivity方法来做。。。那么这样设置的alarm就是启
动一个activity了。。。来看看pendingIntent.getBroadCast(Retrievea
PendingIntentthatwillperformabroadcast,likecalling
Context.sendBroadcast()androidAPI
里面说检索一个PendingIntent,将执行一个广播类似于)Context.sendBroadcast
())中的参数(或者说getActivity(Context,int,Intent,int),getBroadcast
(Context,int,Intent,int),getService(Context,int,Intent,
int);),第一个参数就不说了。。那么第二个。是干什么的的??requestCode。。。。
可以看到这个参数需要设置成整型。。这个参数对于当前的需求来说相当的重要,因为这就是
用来区别不同的alarm的。。呵呵。。也许你会想alarm依赖于pendingintent。。只要
pendingintent不是同一个对象就可以了,是的,你的想法是正确的。。。但是怎么区别两
个或者多个PendingIntent是不是同一个对象呢?一般的对象我们new一个就可以了,但是
对于PendingIntent(publicstaticfinalCreator<PendingIntent>)来说这行不
通,因为PendingIntent不是new的而是通过一个静态的方法产生的。。那PendingIntent
就依赖于Intent和requestCode了。。requestCodePrivaterequestcode
forthesender(currentlynotused).这是androidAPI中说的。requestCode
是一个私有的请求码。。。。这就是这个!最后一个int参数就是设置这些值
MaybeFLAG_ONE_SHOT,FLAG_NO_CREATE,FLAG_CANCEL_CURRENT,FLAG_UPDATE_CURRENT,oranyoftheflagsassupportedbyIntent.fillIn()tocontrolwhichunspecifiedpartsoftheintentthatcanbesuppliedwhentheactualsendhappens
用用他们来控制那些intent可以用来发送数据。。。。。
看到这里再理解这段代码就没有什么难处了!这里我要谢谢我的同事的提醒。。因为我也是
android新手!呵呵。。。。