android - 如果应用程序关闭,警报管理器不会触发(从最近的应用程序中删除)
问题描述
我已经编写了即使应用程序关闭也会在特定时间发送通知的代码。这段代码对我来说很好,但只有一个我无法理解的问题。
失败场景:
当我安装应用程序并从界面设置警报并关闭应用程序(从最近的应用程序中删除应用程序)时,我的广播接收器没有被触发。
工作场景:
当我安装应用程序并首次打开时,我将其关闭并再次打开应用程序。之后,我设置了闹钟并再次关闭应用程序。这次我广播接收器被触发。
我不知道为什么在安装后第一次打开应用程序时它的工作方式不同。
设置警报的时间选择器对话框
private TimePickerDialog.OnTimeSetListener timePickerListener = new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int pickerHour,
int pickerMinute) {
Calendar Cal = Calendar.getInstance();
int hour = pickerHour;
int minute = pickerMinute;
Cal.setTimeInMillis(System.currentTimeMillis());
Cal.set(Calendar.HOUR_OF_DAY, hour);
Cal.set(Calendar.MINUTE, minute);
Cal.set(Calendar.SECOND, 0);
Editor e = sharedPrefs.edit();
e.putLong("userTime", Cal.getTimeInMillis());
e.commit();
mytime.setSummary(DateFormat.getTimeFormat(getBaseContext())
.format(new Date(Cal.getTimeInMillis())));
new AlarmTask(UserSettingActivity.this, Cal).run();
}
};
这是我的警报管理器类代码
public class AlarmTask implements Runnable{
private final Calendar date;
private final AlarmManager alarmManager;
private final Context context;
public AlarmTask(Context context, Calendar date) {
this.context = context;
this.alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
this.date = date;
}
@Override
public void run() {
Log.d("abc","alarm settled");
Intent intent = new Intent(context, com.quotes.beinspiration.AlarmReceiver.class);
intent.putExtra(NotifyService.INTENT_NOTIFY, true);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 5399, intent, PendingIntent.FLAG_UPDATE_CURRENT);
if (Build.VERSION.SDK_INT >= 23) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,
date.getTimeInMillis(), pendingIntent);
} else if (Build.VERSION.SDK_INT >= 19) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, date.getTimeInMillis(), pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, date.getTimeInMillis(), pendingIntent);
}
}
}
广播接收器代码
public class AlarmReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Log.d("abc","Broadcast Received");
Intent i = new Intent(context, NotifyService.class);
intent.putExtra(NotifyService.INTENT_NOTIFY, true);
context.startService(i);
}
}
在清单中注册的广播
<receiver android:name="com.quotes.beinspiration.AlarmReceiver"/>
任何形式的帮助将不胜感激。