警报未决意图一次又一次地被调用
Alarm pending intent getting called again and again
我在我目前正在进行的项目中添加了警报。他们在我所有的条件下都工作得很好。面对一个小问题。我添加了一个一次性警报,我希望它按时触发,它工作正常,并且在到达时间后打开一个 activity,其中包含我通过意图发送的值。问题是即使在警报被触发后,挂起的意图也会被再次调用,当我关闭 activity 时它会打开带有空值的 activity 它再次弹出与我关闭它一样多的次数。未决意图在指定时间触发后不会被取消。下面是我设置闹钟的代码。
public void setAlarm(int hours, int minutes,String AMPM, String alarmType,String message, String extraMessage)
{
Random rand = new Random();
int n = rand.nextInt(10000) + 1;
Log.e("HMA",hours+" "+minutes+" "+AMPM + " " + message + extraMessage);
// Toast.makeText(getApplicationContext(), "Alarm On",
// Toast.LENGTH_SHORT).show();
Calendar calendar = Calendar.getInstance();
// set selected time from timepicker to calendar
calendar.set(Calendar.HOUR_OF_DAY, hours);
calendar.set(Calendar.MINUTE,minutes);
calendar.set(Calendar.SECOND,00);
if(AMPM.equals("PM")) {
Log.e("PM","");
calendar.set(Calendar.AM_PM, Calendar.PM);
}
else
{
calendar.set(Calendar.AM_PM, Calendar.AM);
}
Intent myIntent = new Intent(this,
MyReceiver.class);
AlarmManager alarmManager;
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
myIntent.putExtra("alarmType",alarmType);
myIntent.putExtra("gifMessage",message);
myIntent.putExtra("extraMessage",extraMessage);
PendingIntent pendingIntent;
// A PendingIntent specifies an action to take in the
// future
pendingIntent = PendingIntent.getBroadcast(
this, n, myIntent, 0);
// set alarm time
if(Build.VERSION.SDK_INT<19) {
alarmManager.set(AlarmManager.RTC,
calendar.getTimeInMillis(), pendingIntent);
}
else if(Build.VERSION.SDK_INT>=19 && Build.VERSION.SDK_INT<=22)
{
alarmManager.setExact(AlarmManager.RTC,
calendar.getTimeInMillis(), pendingIntent);
}
else if(Build.VERSION.SDK_INT>=23)
{
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC,
calendar.getTimeInMillis(), pendingIntent);
}
}
我使用 IntentService 而不是 Service 解决了它,并在 onStartCommand 中返回 START_NOT_STICKY。
我在我目前正在进行的项目中添加了警报。他们在我所有的条件下都工作得很好。面对一个小问题。我添加了一个一次性警报,我希望它按时触发,它工作正常,并且在到达时间后打开一个 activity,其中包含我通过意图发送的值。问题是即使在警报被触发后,挂起的意图也会被再次调用,当我关闭 activity 时它会打开带有空值的 activity 它再次弹出与我关闭它一样多的次数。未决意图在指定时间触发后不会被取消。下面是我设置闹钟的代码。
public void setAlarm(int hours, int minutes,String AMPM, String alarmType,String message, String extraMessage)
{
Random rand = new Random();
int n = rand.nextInt(10000) + 1;
Log.e("HMA",hours+" "+minutes+" "+AMPM + " " + message + extraMessage);
// Toast.makeText(getApplicationContext(), "Alarm On",
// Toast.LENGTH_SHORT).show();
Calendar calendar = Calendar.getInstance();
// set selected time from timepicker to calendar
calendar.set(Calendar.HOUR_OF_DAY, hours);
calendar.set(Calendar.MINUTE,minutes);
calendar.set(Calendar.SECOND,00);
if(AMPM.equals("PM")) {
Log.e("PM","");
calendar.set(Calendar.AM_PM, Calendar.PM);
}
else
{
calendar.set(Calendar.AM_PM, Calendar.AM);
}
Intent myIntent = new Intent(this,
MyReceiver.class);
AlarmManager alarmManager;
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
myIntent.putExtra("alarmType",alarmType);
myIntent.putExtra("gifMessage",message);
myIntent.putExtra("extraMessage",extraMessage);
PendingIntent pendingIntent;
// A PendingIntent specifies an action to take in the
// future
pendingIntent = PendingIntent.getBroadcast(
this, n, myIntent, 0);
// set alarm time
if(Build.VERSION.SDK_INT<19) {
alarmManager.set(AlarmManager.RTC,
calendar.getTimeInMillis(), pendingIntent);
}
else if(Build.VERSION.SDK_INT>=19 && Build.VERSION.SDK_INT<=22)
{
alarmManager.setExact(AlarmManager.RTC,
calendar.getTimeInMillis(), pendingIntent);
}
else if(Build.VERSION.SDK_INT>=23)
{
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC,
calendar.getTimeInMillis(), pendingIntent);
}
}
我使用 IntentService 而不是 Service 解决了它,并在 onStartCommand 中返回 START_NOT_STICKY。