博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
闹钟开发过程中用PendingIntent传送数据丢失解决办法
阅读量:6641 次
发布时间:2019-06-25

本文共 1562 字,大约阅读时间需要 5 分钟。

当要设置一个闹钟时,可以把数据放在Intent里,再用intent对象生成一个PendingIntent对象,然后用AlarmManager 来邦定PendingIntent对象设置闹钟,具体代码如下:

Intent intent = new Intent(context, AlarmReceiver.class);

        intent.putExtra("id", alarm.getId());
        intent.putExtra("weekday", getCurrentWeekday());
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context,  alarm.getId(), intent, 0);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC_WAKEUP, triggerAtTime, pendingIntent);

闹钟设置的代码基本上是这样的,但是如果在启动的Broadcast中接收Intent过来的数据,有时会得到一个null值,也就是说,根本没有数据传过来。

因此查看官方api,发现 PendingIntent pendingIntent = PendingIntent.getBroadcast(context,  alarm.getId(), intent, 0);的最后一个参数参数是int flag,这个值可以是FLAG_ONE_SHOT, FLAG_NO_CREATE, FLAG_CANCEL_CURRENT, FLAG_UPDATE_CURRENT
简单翻译一下:
int FLAG_CANCEL_CURRENT:如果该PendingIntent已经存在,则在生成新的之前取消当前的。
int FLAG_NO_CREATE:如果该PendingIntent不存在,直接返回null而不是创建一个PendingIntent.
int FLAG_ONE_SHOT:该PendingIntent只能用一次,在send()方法执行后,自动取消。
int FLAG_UPDATE_CURRENT:如果该PendingIntent已经存在,则用新传入的Intent更新当前的数据。
我们需要把最后一个参数改为PendingIntent.FLAG_UPDATE_CURRENT,这样在启动的Activity里就可以用接收Intent传送数据的方法正常接收。

Intent intent = new Intent(context, AlarmReceiver.class);
        intent.putExtra("id", alarm.getId());
        intent.putExtra("weekday", getCurrentWeekday());
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context,  alarm.getId(), intent,endingIntent.FLAG_UPDATE_CURRENT);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC_WAKEUP, triggerAtTime, pendingIntent);

转载地址:http://ikovo.baihongyu.com/

你可能感兴趣的文章
酷派发布新品牌ivvi,精品手机市场格局再变
查看>>
新浪微博传播途径研究
查看>>
为什么你的网站不到赚钱?原因都在这里了
查看>>
应用系统中常见报表类型解析
查看>>
Hyper-V 3 虚拟机快照之三 应用和删除快照
查看>>
一例所有文件都打不开的数据恢复过程
查看>>
SCCM2012 SP1客户端请求方式安装64Bit windows7失败
查看>>
安全威胁情报实战
查看>>
SQL Server 备份场景示例
查看>>
.NET深入解析LINQ框架(五:IQueryable、IQueryProvider接口详解)
查看>>
ASP.NET MVC4+BootStrap 实战(二)
查看>>
使用引导光盘,将你的PC变身瘦客户机
查看>>
从多线程想到做有意义的编程
查看>>
指付通盗刷信用卡维权连载--9月3日维权纪实
查看>>
云计算安全解决方案白皮书(二)
查看>>
2016! 新年快乐! 猴年快乐!
查看>>
【单机实现系列】SCDPM2012实现数据保护
查看>>
报表服务入门(实验8)部署报表
查看>>
在Bat批处理中调用Powershell脚本
查看>>
搜索正在移动社交化
查看>>