做一个记事闹铃的软件笔记
2013-08-10 10:34
246 查看
补充下上一次的问题http://blog.csdn.net/fancylovejava/article/details/9862183
在做一个记事日程提醒的android软件
给每条记事设置闹钟当然是发送广播给广播接收器咯,可是问题就出现了,
我是在存了一条记事,然后给这条记事添加闹钟时间设置的时候判断一下是否为最近的时间闹铃,if true就发送广播,
这个广播是用PendingIntent.getBroadCast发送的(这个方法里面就已经包含了sendBroadCast方法了),
而在广播接收器里面接收到了广播后启动闹铃,我使用的是手机系统默认的闹铃,
Uri mediaUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
mMediaPlayer = MediaPlayer.create(context, mediaUri);
mMediaPlayer.setLooping(true);
获取到默认铃声,然后就start,stop控制了。。。。
然后闹铃响了,在广播接收器里启动一个activity哦,这个activity要设置成i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
否则会有错误提示,android报错蛮人性化的,根据这个错误提示我才解决的这个问题。
启动了activity之后呢,然后在这个activiyt中再发送广播给这个广播接收器咯,
Intent i = new Intent("test.notepadalarmreceiver");
Bundle bundle = new Bundle();
bundle.putParcelable("testnote", note2);
i.putExtra("testnotealarm", bundle);
PendingIntent pi = PendingIntent.getBroadcast(AlarmShowActivity.this, 0, i,0);
AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP,System.currentTimeMillis()+d1-d2,pi);
部分代码贴出来,
可是问题又出现了,就是传过去的bundle对象,无法自动更新,广播接收器里面接收到的bundle对象里面的序列化之后的对象一直都是最开始
PendingIntent.getBroadcast(AlarmShowActivity.this, 0, i, 0);里面的数据,
google一下,找到了篇文章http://blog.csdn.net/dadoneo/article/details/8164058
里面说的bundle数据清理什么的跟我的情况很相似,
然后我贴在我项目里,运行了下,结果报错了,
java.lang.IllegalArgumentException: Can't use FLAG_RECEIVER_BOOT_UPGRADE here又一个人性化的错误提示,直接google错误提示
http://stackoverflow.com/questions/10228762/getting-java-lang-illegalargumentexception-cant-use-flag-receiver-boot-upgrad这上面得到的灵感
按照上面的修改了下,以为大功告成了,结果还是报错了,都不懂意思。。。。。。
最终解决的是
PendingIntent pi = PendingIntent.getBroadcast(AlarmShowActivity.this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT| PendingIntent.FLAG_ONE_SHOT);
而不是在intent里面setflags这个PendingIntent.FLAG_UPDATE_CURRENT| PendingIntent.FLAG_ONE_SHOT
然后在广播接收器里面接收到的bundle数据对象确实不一样了,大功告成了,
ps:不过我还是不明白为什么我intent.getExtra()得到的bundle对象之后,bundle.clear(),intent.removeExtra()都没起作用,真心恼火啊,有人明白吗
请留言交流!!!谢谢
在做一个记事日程提醒的android软件
给每条记事设置闹钟当然是发送广播给广播接收器咯,可是问题就出现了,
我是在存了一条记事,然后给这条记事添加闹钟时间设置的时候判断一下是否为最近的时间闹铃,if true就发送广播,
这个广播是用PendingIntent.getBroadCast发送的(这个方法里面就已经包含了sendBroadCast方法了),
而在广播接收器里面接收到了广播后启动闹铃,我使用的是手机系统默认的闹铃,
Uri mediaUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
mMediaPlayer = MediaPlayer.create(context, mediaUri);
mMediaPlayer.setLooping(true);
获取到默认铃声,然后就start,stop控制了。。。。
然后闹铃响了,在广播接收器里启动一个activity哦,这个activity要设置成i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
否则会有错误提示,android报错蛮人性化的,根据这个错误提示我才解决的这个问题。
启动了activity之后呢,然后在这个activiyt中再发送广播给这个广播接收器咯,
Intent i = new Intent("test.notepadalarmreceiver");
Bundle bundle = new Bundle();
bundle.putParcelable("testnote", note2);
i.putExtra("testnotealarm", bundle);
PendingIntent pi = PendingIntent.getBroadcast(AlarmShowActivity.this, 0, i,0);
AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP,System.currentTimeMillis()+d1-d2,pi);
部分代码贴出来,
可是问题又出现了,就是传过去的bundle对象,无法自动更新,广播接收器里面接收到的bundle对象里面的序列化之后的对象一直都是最开始
PendingIntent.getBroadcast(AlarmShowActivity.this, 0, i, 0);里面的数据,
google一下,找到了篇文章http://blog.csdn.net/dadoneo/article/details/8164058
里面说的bundle数据清理什么的跟我的情况很相似,
intent.setFlags(PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT);他给出了这行代码,这个意思就是pendingintent更新当前的,并且只发射一次oneshot吧,
然后我贴在我项目里,运行了下,结果报错了,
java.lang.IllegalArgumentException: Can't use FLAG_RECEIVER_BOOT_UPGRADE here又一个人性化的错误提示,直接google错误提示
http://stackoverflow.com/questions/10228762/getting-java-lang-illegalargumentexception-cant-use-flag-receiver-boot-upgrad这上面得到的灵感
PendingIntent p=PendingIntent.getBroadcast(context, id, i,PendingIntent.FLAG_CANCEL_CURRENT);
按照上面的修改了下,以为大功告成了,结果还是报错了,都不懂意思。。。。。。
最终解决的是
PendingIntent pi = PendingIntent.getBroadcast(AlarmShowActivity.this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT| PendingIntent.FLAG_ONE_SHOT);
而不是在intent里面setflags这个PendingIntent.FLAG_UPDATE_CURRENT| PendingIntent.FLAG_ONE_SHOT
然后在广播接收器里面接收到的bundle数据对象确实不一样了,大功告成了,
ps:不过我还是不明白为什么我intent.getExtra()得到的bundle对象之后,bundle.clear(),intent.removeExtra()都没起作用,真心恼火啊,有人明白吗
请留言交流!!!谢谢
相关文章推荐
- 笔记,记事软件(RedbookNote, lifeopraph)
- 小妞会装机 -- 一个装机软件的开发笔记 (二)
- 小妞会装机 -- 一个装机软件的开发笔记(八)
- 有道云笔记、印象笔记、为知笔记、麦库记事国内四大笔记软件全方面比较
- 推荐一个超级 简洁 易用 免费 的 在线记事本软件,方便随时记录资料
- 一个程序员的软件开发笔记[连载]
- 小妞会装机 -- 一个装机软件的开发笔记(六)
- [转载]一个好用的Linux下的笔记软件Xournal(pdf加注释)
- 一个基于MedioRecorder的安卓录音软件【笔记】
- 推荐一个做笔记的软件_印象笔记
- 小妞会装机 -- 一个装机软件的开发笔记( 四)
- 开始写笔记,学习win8开发,争取做一个独立软件开发者
- 防遗忘笔记:推荐一个ubuntu 下可以通过命令行发送邮件的软件
- python网络编程笔记(1)———写一个自己的聊天软件
- 小妞会装机 -- 一个装机软件的开发笔记(七)
- 用什么样的个人笔记类软件?OneNote、EverNote(印象笔记)、为知笔记、麦库记事、有道云笔记……
- 一个软件开发工程师的零散笔记总汇(一)
- 一个软件开发工程师的零散笔记总汇(二)
- 一个软件开发工程师的零散笔记总汇(三)
- 小妞会装机 -- 一个装机软件的开发笔记(五)