我创建了一项服务,可以在一天中的特定时间和每天(例如上午6点)检查一些在线数据,而不是使用后台运行服务和广播接收器,我决定使用AlarmMananger和下面的代码:如何让我的服务在当天的特定时间定期开始
Intent myIntent = new Intent(MainActivity.this, MyAlarmService.class);
pendingIntent = PendingIntent.getService(MainActivity.this, 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 6);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
我的问题是:
1 - 如何从AlarmManager注销时,用户决定取消激活我的服务?
2 - 有什么用这条线的
calendar.setTimeInMillis(System.currentTimeMillis());
3-会发生什么,如果我用同样PARAMS和数据称为上面相同的功能,将AlarmMananger覆盖我的请求,或者将注册一个新的一个,当时间到了(上午6点)它会打电话给我的服务两次?
4-是否可以检查AlarmMananger是否已成功注册我的意图?
编辑1:
下面的代码无法触发我的广播接收器,为什么?
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 6); // For 6 AM
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
PendingIntent pi = PendingIntent.getService(this, 0, new Intent(this, mybroadcastreceiver.class), PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);
AndroidManifest.xml中
<receiver
android:name=".mybroadcastreceiver"
android:enabled="true"
android:exported="true"></receiver>
感谢所有这些问题的答案,但这里有一个问题,我说上面,我在下午6点AlertMananager想每天要打电话给我的接收器的编辑,但是,这并不甚至发生一次,代码中出了什么问题?知道我添加了SET_ALARM权限,并且我的接收者没有被调用相同的结果。 – Jack
您是否将输入数据保存在任何数据存储中?如果没有,然后保存。保存与通话AlarmManager的保存时间和系统时间比较后 –