Android PendingIntent.getBroadcast方法中 intent数据不更新问题

项目详情
问题:设置多个不同的提醒闹钟,但是提醒内容始终是一样,最后测试发现,intent值虽然赋进去了,但是不知道为啥 PendingIntent.getBroadcast(ScheduleView.this, 0, intent, 0);里的intent值输出来却是以前的。。。猜想getBroadcast()函数的问题。

  1. Service 中设置定时广播的代码
private AlarmManager alarmManager;
        private Calendar calendar;
        private Intent intent;
        private PendingIntent pendingIntent;
        private int alarmCount = 0;

        public void setAlarm(String todo, int code) {
            alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);
            calendar = Calendar.getInstance();
            calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND));
            intent = new Intent("android.intent.action.alarm");
            intent.putExtra("todo", todo);
            intent.putExtra("remindTypeCode", code);
            Log.d(TAG, "setAlarm: " + intent.getStringExtra("todo") + intent.getIntExtra("remindTypeCode", 0));
            calendar.set(year, (month-1), day, hour, minute, 0);
            pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
            alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
        }

原因:查看了很多资料,是因为PendingIntent.getBroadcast(Context context, int requestCode, Intent intent, int flags) 第二个和第四个参数引起的。

解决

int alarmCount=0;
PendingIntent pi = PendingIntent.getBroadcast(ScheduleView.this,alarmCount++, intent,PendingIntent.FLAG_UPDATE_CURRENT); // 创建PendingIntent

将第二个参数设置成自增变量,保证每次不同,将第四个参数设置成及时更新。只有这两个参数都设置才有用。数据不变,更新了也没用,数据变了,不更新也没用。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: pendingintent.getbroadcast是一个Android API方法,用于获取一个广播IntentPendingIntent对象。它可以用于在特定的时间或事件触发时发送广播。例如,当用户点击通知栏的按钮时,可以使用此方法获取一个PendingIntent对象,以便在按钮被点击时发送一个广播。 ### 回答2: PendingIntent.getBroadcast() 是一个用于获取广播的PendingIntent的静态方法。 在AndroidPendingIntent是一种特殊的Intent,它允许您延迟执行某个Intent操作。通过使用PendingIntent,您可以在未来的某个时间点触发特定的操作,甚至在应用退出后仍然有效。 getBroadcast() 方法用于获取一个PendingIntent,它可以用于发送广播。当您获取到一个通过getBroadcast()方法创建的PendingIntent时,您可以在需要的时候通过send()方法发送一个广播。发送的广播可以被其他组件接收并执行相应的操作。 通常情况下,使用getBroadcast()方法创建PendingIntent主要有两个用途。一是发送自定义的广播消息,让其他组件接收并对相应的事件作出反应。二是使用系统提供的广播消息,例如发送一个系统定义的ACTION_BOOT_COMPLETED广播,以在设备启动完成后执行相应的操作。 使用getBroadcast()方法创建PendingIntent时,您需要提供一个Context对象,一个请求码(requestCode),一个Intent对象和一些标志(flags)。Context对象用于获取系统服务,请求码用于标识PendingIntentIntent对象用于描述广播的内容,标志用于对PendingIntent进行一些定制化的操作。 总的来说,PendingIntent.getBroadcast()是一个非常有用的方法,它允许您在适当的时间发送广播,以实现您的特定需求。无论是发送自定义的广播消息还是使用系统提供的广播消息,getBroadcast()方法都是您实现这些功能的关键。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值