Android 虽然时间不同,但报警管理器会持续触发
我正在尝试向onStartCommand()中的服务传递挂起的意图。但一旦警报设置,它将持续触发。我设置了两个警报,一个在凌晨4点,一个在晚上8点。我想实现这样的逻辑:当在上午4点发出警报时,应设置晚上8点的警报;当在晚上8点发出警报时,应设置上午4点的警报。但它出人意料地发挥了作用。当晚上8点发送意图时,在4秒内发送上午4点的意图,再次设置晚上8点的警报,并且该循环重复。 我在哪里犯错?请引导我Android 虽然时间不同,但报警管理器会持续触发,android,Android,我正在尝试向onStartCommand()中的服务传递挂起的意图。但一旦警报设置,它将持续触发。我设置了两个警报,一个在凌晨4点,一个在晚上8点。我想实现这样的逻辑:当在上午4点发出警报时,应设置晚上8点的警报;当在晚上8点发出警报时,应设置上午4点的警报。但它出人意料地发挥了作用。当晚上8点发送意图时,在4秒内发送上午4点的意图,再次设置晚上8点的警报,并且该循环重复。 我在哪里犯错?请引导我 public class Alarmclass extends Service { @Nullab
public class Alarmclass extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
private String Stat;
private boolean GetTypeofAlarm() {
Log.e("Getting type", "Getting alarm types");
boolean alarmtype = false;
int hours;
Calendar c = Calendar.getInstance();
hours = c.get(Calendar.HOUR_OF_DAY);
if (hours <= 5) {
alarmtype = false;
} else if (hours >= 20) {
alarmtype = false;
} else if (hours >= 5 && hours <= 20)
alarmtype = true;
return alarmtype;
}
@Override
public void onCreate() {
super.onCreate();
if (!GetTypeofAlarm()) {
StartLocAlarm();
}else{
StopLocAlarm();
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent.hasExtra("START")) {
if(intent.getStringExtra("START").equals("START_ALR")) {
StopLocAlarm();
}
}else if(intent.hasExtra("STOP")){
if(intent.getStringExtra("STOP").equals("STOP_ALR")) {
StartLocAlarm();
}
}
Intent Actint = new Intent(this, Startup_Activity.class);
Actint.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 2422, Actint, 0);
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle("Admin")
.setSmallIcon(R.mipmap.ic_launcher)
.setContentIntent(pendingIntent)
.setContentText(Stat)
.setOngoing(true).build();
startForeground(201, notification);
return START_STICKY;
}
private void StartLocAlarm(){
AlarmManager alrmMgr;
PendingIntent alarmIntent;
Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis());
c.set(Calendar.HOUR_OF_DAY, 4);
alrmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, Alarmclass.class);
intent.putExtra("START", "START_ALR");
alarmIntent = PendingIntent.getService(this, 0, intent, 0);
alrmMgr.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),alarmIntent);
Log.e("In onstart","Setting alarm at 5 AM");
Stat = "Alarm set for 5 AM";
}
private void StopLocAlarm(){
AlarmManager alarmMgr;
PendingIntent alarmIntent;
Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis());
c.set(Calendar.HOUR_OF_DAY, 20);
alarmMgr = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
Intent intent2 = new Intent(this, Alarmclass.class);
intent2.putExtra("STOP", "STOP_ALR");
alarmIntent = PendingIntent.getService(this, 1, intent2, 0);
alarmMgr.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), alarmIntent);
Log.e("In onstart", "Setting alarm at 8 PM");
Stat = "Alarm set for 8 PM";
}
}
公共类Alarmclass扩展服务{
@可空
@凌驾
公共IBinder onBind(意向){
返回null;
}
私有字符串统计;
私有布尔GetTypeofAlarm(){
Log.e(“获取类型”、“获取报警类型”);
布尔alarmtype=false;
整小时;
Calendar c=Calendar.getInstance();
小时=c.get(日历小时);
如果(小时=20){
alarmtype=false;
}否则,如果(小时数>=5&&hours您在您现在所在的同一天设置凌晨4点警报,则应将凌晨4点设置为第二天。。
例如:今天是星期三,晚上8点警报被触发。你的下一个警报应该设置在星期四上午4点
在日历中添加一天(这也支持月末,所以这就是你所需要做的
c.add(Calendar.DAY_OF_MONTH, 1); //Adding 1 day
它仍在不断循环。我不明白…你想只在用户按下通知后设置下一个警报吗?不,我希望警报自动设置,而不需要任何用户交互。那么为什么这样不好呢?何时:调用4am->调用8pm->明天调用4am->调用8pm…就像这样?只是一个问题:wh你不只是每天做两次报警,一次设置为晚上8点,一次设置为凌晨4点?