java - Android警报管理器每天不工作两次
问题描述
我需要提醒经理每天重复两次,为此我在两个不同的时间使用了 2 个日历对象,但它只适用于第一次而不是第二次
主要活动
public void startEvent(View view) {
Calendar cal1 = Calendar.getInstance();
cal1.set(Calendar.HOUR_OF_DAY, 14);
cal1.set(Calendar.MINUTE, 00);
cal1.set(Calendar.SECOND, 00);
Calendar cal2 = Calendar.getInstance();
cal2.set(Calendar.HOUR_OF_DAY, 14);
cal2.set(Calendar.MINUTE, 30);
cal2.set(Calendar.SECOND, 00);
Intent intent = new Intent(getApplicationContext(), YourBroadCastReceiver.class);
PendingIntent pIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
AlarmManager am = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, cal1.getTimeInMillis(),cal2.getTimeInMillis(), pIntent);
Toast.makeText(this, "Alarm is set now", Toast.LENGTH_SHORT).show();
}
广播接收器
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Send Location to server", Toast.LENGTH_LONG).show();
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("test");
myRef.push().setValue("New Location Received");
}
解决方案
Intent intent;
PendingIntent pIntent;
AlarmManager alarmManager;
Date date = new Date();
Calendar cal_now = Calendar.getInstance();
cal_now.setTimeInMillis(System.currentTimeMillis());
cal_now.setTime(date);
private void alarmOne(){
Calendar cal1 = Calendar.getInstance();
cal1.setTimeInMillis(System.currentTimeMillis());
cal_alarm.setTime(date);
cal1.set(Calendar.HOUR_OF_DAY, 14);
cal1.set(Calendar.MINUTE, 00);
cal1.set(Calendar.SECOND, 00);
cal1.set(Calendar.AM_PM, 1);
if(cal1.before(cal_now)){
// Move to tomorrow for first alarm
cal1.add(Calendar.DATE, 1);
}
intent = new Intent(getApplicationContext(), YourBroadCastReceiver.class);
pIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
cal1.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pIntent);
}
private void alarmTwo(){
Calendar cal2 = Calendar.getInstance();
cal2.setTimeInMillis(System.currentTimeMillis());
cal2.setTime(date);
cal2.set(Calendar.HOUR_OF_DAY, 14);
cal2.set(Calendar.MINUTE, 30);
cal2.set(Calendar.SECOND, 00);
cal2.set(Calendar.AM_PM, 1);
if(cal2.before(cal_now)){
// Move to tomorrow for second alarm
cal2.add(Calendar.DATE, 1);
}
pIntent = PendingIntent.getBroadcast(getApplicationContext(), 1, intent, 0);
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
cal2.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pIntent);
}
推荐阅读
- java - 定义整个maven项目的连接范围——spring mvc
- windows - 远程 Windows 计算机操作系统根驱动器号
- scala - 如何从 sbt dist 中排除一些 jar 并在运行时加载它们
- java - ThreadPoolTaskScheduler 不适用于线程池
- java - 改造 API 接口调用错误
- authentication - 使用 context.Activity.CreateOAuthReplyAsync 在 Microsoft Teams 中显示来自机器人的 Office 365 身份验证对话框
- python-3.x - Python APScheduler 密钥错误
- python - 提供形状为 (?, n) 的占位符时出现问题
- r - 对于第三个预测变量的特定范围,我如何可视化来自 NN 的 2 个预测变量的洞察力
- html - 我的 CSS 过渡有问题,它在第一次运行时不起作用