返回信息流利用broadcast,receiver和alarmManager 来设定时间。当只设定一个时间的时候,是可以实现的,比如:
AlarmManager am = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(MYACTION);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 1);
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_MONTH, 14);
c.set(Calendar.HOUR_OF_DAY, 12);
c.set(Calendar.MINUTE, 00);
c.set(Calendar.SECOND, 00);
am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);
但是如果要设定两个时间,程序就有错误了。
第一种方法:
AlarmManager am = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(MYACTION);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 1);
Calendar c = Calendar.getInstance();
String t = c.get(Calendar.DAY_OF_MONTH)+"-"+c.get(Calendar.HOUR_OF_DAY)+"-"+c.get(Calendar.MINUTE)+"-"+c.get(Calendar.SECOND);
if (t == "14-14-33-00"){
am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);
}
else if(t == "14-14-35-00"){
am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);
}
这种方法不会报错,但是在33分和35分的时候,程序并没有运行。
第二种方法:
AlarmManager am = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(MYACTION);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 1);
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_MONTH, 14);
c.set(Calendar.HOUR_OF_DAY, 14);
if(Calendar.MINUTE == 33){
am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);
}
else if(Calendar.MINUTE == 35){
am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);
}
这种情况下,程序会报警告“ DEAD CODE”,运行结果也不是2次。
请教各位大牛,如何设定2个时间?
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #4388同步于 2011/10/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖
[求助] android 定时问题
likaiye
2011/10/14镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 ingenious 的大作中提到: 】
: t == "14-14-33-00"
: 这能行么
: --
: ...................
最开始的时候,我写的是 int t = c.get(Calendar.DAY_OF_MONTH)+c.get(Calendar.HOUR_OF_DAY)+c.get(Calendar.MINUTE)+c.get(Calendar.SECOND);
if(t == 14143300 ), 但是不行,所以改成string试了试,结果还是不行...
好像用 calendar的时候,if 和switch都不管用...
我是想在每个月的1号和15号零点的时候启动程序 ,但是不知道怎么写这2个时间条件...
PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 1);
我记得是最后一个参数用于区分不同的PendingIntent,你第二次设置的时候改不同的数就行了,否则会被系统认为是修改第一次设置的时间
我暑假实习做的是闹钟的一个程序,有问题可以站内我。你想每个月固定时间想闹钟,先去研究随系统启动的服务,因为每次需要开机时注册闹钟,每次关机的时候注册的闹钟就被取消了。你可以去上网下载一个Android系统自带闹钟的源码研究一下。
闹钟记得是有关机依旧响铃这个模式的
sf的意思是ls的意思
【 在 yellowxz 的大作中提到: 】
: 我暑假实习做的是闹钟的一个程序,有问题可以站内我。你想每个月固定时间想闹钟,先去研究随系统启动的服务,因为每次需要开机时注册闹钟,每次关机的时候注册的闹钟就被取消了。你可以去上网下载一个Android系统自带闹钟的源码研究一下。
: --
【 在 yellowxz 的大作中提到: 】
: PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 1);
: 我记得是最后一个参数用于区分不同的PendingIntent,你第二次设置的时候改不同的数就行了,否则会被系统认为是修改第一次设置的时间
: --
: ...................
那你的意思是
AlarmManager am = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(MYACTION);
PendingIntent pi1 = PendingIntent.getBroadcast(this, 0, intent, 1);
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_MONTH, 01);
c.set(Calendar.HOUR_OF_DAY, 00);
c.set(Calendar.MINUTE, 00);
c.set(Calendar.SECOND, 00);
am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi1);
PendingIntent pi2 = PendingIntent.getBroadcast(this, 0, intent, 2);
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_MONTH, 15);
c.set(Calendar.HOUR_OF_DAY, 00);
c.set(Calendar.MINUTE, 00);
c.set(Calendar.SECOND, 00);
am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi2);
这样吗?
另外,我不是要闹钟定时,我是想在每个月的1号和15号,自动启动这个应用程序,然后这个程序会再连接服务器进行更新,所以现在只是定时启动程序。
【 在 ingenious 的大作中提到: 】
: 闹钟记得是有关机依旧响铃这个模式的
: sf的意思是ls的意思
: 【 在 yellowxz 的大作中提到: 】
: ...................
String maj1 = "01-00-00-00";
String maj2 = "15-00-00-00";
String t = c.get(Calendar.DAY_OF_MONTH)+"-"+c.get(Calendar.HOUR_OF_DAY)+"-"+c.get(Calendar.MINUTE)+"-"+c.get(Calendar.SECOND);
if (t.equals(maj1)){
am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);
}
else if(t.equals(maj2)){
am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);
}
我用了equals之后,也不行啊...到了设定的时间,还是启动不了...
【 在 yellowxz 的大作中提到: 】
: PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 1);
: 我记得是最后一个参数用于区分不同的PendingIntent,你第二次设置的时候改不同的数就行了,否则会被系统认为是修改第一次设置的时间
: --
: ...................
设置两个PendingIntent的方法成功了,多谢多谢
但还有个小问题,如果设置的时间是1号和15号的0点0分0秒,程序就是无休止的自动启动,但改个时间,比如3点0分0秒,就正常运行了,很奇怪...