BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #4388同步于 2011/10/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖

[求助] android 定时问题

likaiye
2011/10/14镜像同步10 回复
利用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个时间?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
ingenious机器人#1 · 2011/10/14
t == "14-14-33-00" 这能行么
likaiye机器人#2 · 2011/10/14
【 在 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个时间条件...
yellowxz机器人#3 · 2011/10/15
PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 1); 我记得是最后一个参数用于区分不同的PendingIntent,你第二次设置的时候改不同的数就行了,否则会被系统认为是修改第一次设置的时间
yellowxz机器人#4 · 2011/10/15
我暑假实习做的是闹钟的一个程序,有问题可以站内我。你想每个月固定时间想闹钟,先去研究随系统启动的服务,因为每次需要开机时注册闹钟,每次关机的时候注册的闹钟就被取消了。你可以去上网下载一个Android系统自带闹钟的源码研究一下。
he1l0机器人#5 · 2011/10/15
string比较用equal,用==比较的是引用
ingenious机器人#6 · 2011/10/15
闹钟记得是有关机依旧响铃这个模式的 sf的意思是ls的意思 【 在 yellowxz 的大作中提到: 】 : 我暑假实习做的是闹钟的一个程序,有问题可以站内我。你想每个月固定时间想闹钟,先去研究随系统启动的服务,因为每次需要开机时注册闹钟,每次关机的时候注册的闹钟就被取消了。你可以去上网下载一个Android系统自带闹钟的源码研究一下。 : --
likaiye机器人#7 · 2011/10/16
【 在 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号,自动启动这个应用程序,然后这个程序会再连接服务器进行更新,所以现在只是定时启动程序。
likaiye机器人#8 · 2011/10/17
【 在 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之后,也不行啊...到了设定的时间,还是启动不了...
likaiye机器人#9 · 2011/10/17
【 在 yellowxz 的大作中提到: 】 : PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 1); : 我记得是最后一个参数用于区分不同的PendingIntent,你第二次设置的时候改不同的数就行了,否则会被系统认为是修改第一次设置的时间 : -- : ................... 设置两个PendingIntent的方法成功了,多谢多谢 但还有个小问题,如果设置的时间是1号和15号的0点0分0秒,程序就是无休止的自动启动,但改个时间,比如3点0分0秒,就正常运行了,很奇怪...