目前我有这个代码:
public static void setupAlarm(Context context) { Intent myIntent = new Intent(context,Receiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(context,myIntent,PendingIntent.FLAG_NO_CREATE); if (pendingIntent != null) { return; } else { pendingIntent = PendingIntent.getBroadcast(context,PENDING_INTENT_RETRY,PendingIntent.FLAG_ONE_SHOT); } AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.add(Calendar.MINUTE,2); alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent); }
我想要的是一次使用待定意图并等待火灾.如果在此期间有人要求新警报,如果警报存在,我不想设置任何东西.现在我的问题是:在第一次警报之后,由于ONE_SHOT标志而导致挂起的意图被删除,但是我可以再次创建待处理的意图吗?
解决方法
是的,当然你可以再创建它.您将从第一个获得不同的PendingIntent.
但是,您发布的代码存在一些问题.首先,您创建PendingIntent,如下所示:
pendingIntent = PendingIntent.getBroadcast(context,PendingIntent.FLAG_ONE_SHOT);
但你检查它是否像这样存在:
pendingIntent = PendingIntent.getBroadcast(context,PendingIntent.FLAG_NO_CREATE);
此检查将始终返回null,因为您使用的是另一个requestCode!当您创建PendingIntent时,您将PENDING_INTENT_RETRY作为requestCode传递,但是当您检查它是否存在时,您将0传递为requestCode.
第二个问题是FLAG_ONE_SHOT的工作方式.如果使用FLAG_ONE_SHOT创建PendingIntent然后尝试使用FLAG_NO_CREATE获取PendingIntent,它将始终返回null,即使尚未使用PendingIntent!由于此行为,如果您使用使用FLAG_ONE_SHOT创建的PendingIntent设置了该警报,则无法使用FLAG_NO_CREATE来确定警报是否处于挂起状态.
如果您确实想使用此架构,则无法使用FLAG_ONE_SHOT.只需正常创建PendingIntent(不带标志)并使用FLAG_NO_CREATE检查其存在.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。