Nul*_*ion 31 android alarmmanager
我被卡住了.当我的应用程序启动时,我想检查我之前设置的警报是否存在.如果没有,那么我想设置它.
我提到了这个解决方案.我试图匹配这样的意图:
Intent intent = new Intent();
intent.setAction("com.vit.upload");
PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_NO_CREATE);
Run Code Online (Sandbox Code Playgroud)
但它不起作用.还有什么工作?
Ero*_*rol 75
首先,有关如何访问以前创建的警报的小教程:
您可以通过使用唯一ID创建每个警报来区分警报,例如:
Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getActivity(this,UNIQUE_ID_GOES_HERE, intent, 0);
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);
Run Code Online (Sandbox Code Playgroud)
如果要访问此警报,则必须使用相同的唯一ID创建相同的PendingIntent.例如,以下内容仅访问您使用PendingIntent id 1234创建的警报.然后它将取消之前的警报并重置它.
Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 1234, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);
Run Code Online (Sandbox Code Playgroud)
这个想法很简单.跟踪ID,然后使用它们访问各自的警报.如果您创建具有相同ID的多个警报,则最新的警报将取消之前的警报.
解决您的主要问题,而不是每次启动应用程序时检查您的警报是否处于活动状态,只需在Activity的onCreate()方法中重新设置它.与我上面描述的PendingIntent相同.这样可以省去检查先前是否设置过警报的麻烦.由于您的目标是使警报保持活动状态,因此每次启动应用程序时都不会覆盖先前设置的警报.只需确保使用相同的ID来创建PendingIntent.
不要忘记检查警报的时间是否已经过去,以避免尝试设置过去时间的警报,这将立即触发警报.
让我们考虑另一种情况:当您关闭设备时,所有警报都将被取消.这使您别无选择,只能在重新启动时再次设置它们.为此,您必须使用BroadcastReceiver.
这个答案将帮助您如何做到这一点.只需在BroadcastReceiver的onReceive()方法中重新创建警报,如上所述.
Android待定意图使用唯一ID
int REQUEST_CODE=2344; // Unique ID
PendingIntent pIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, intent, PendingIntent.FLAG_NO_CREATE);Run Code Online (Sandbox Code Playgroud)系统重启时必须使用Boot Receiver广播,然后使用相同的请求代码再次创建alaram REQUEST_CODE=2344;
基本上根据我的经验,如果您使用相同的 Intent 和FLAG_UPDATE_CURRENT,您可以确定不会为同一意图设置两个警报。您还可以仔细查看FLAG_NO_CREATE,它与 get 函数一起使用,如果具有所描述意图的待处理意图已经存在,则返回 null。
还要记住对待处理意图使用相同的请求 ID,因为它们是可区分的。
| 归档时间: |
|
| 查看次数: |
23784 次 |
| 最近记录: |