android 重启后通过广播接收器触发多个警报
Multiple alarms are getting fired after reboot in android through broadcast receiver
我正在制作一个通知应用程序,为此我正在为 运行 使用广播接收器 class 的通知使用预定的警报,我正在提示用户每天或每小时 select通知,我在同一个接收器中使用相同的功能定义两个警报并且它工作正常但是当我重新启动我的设备时出现问题,当我重新启动它时两个警报(每天和每小时)都在我只设置时被触发例如,如果我为 11:20 A.M 设置了一个闹钟并每小时重启一次我的设备,而这个 11:20 一个都被触发,我希望当我重启我的设备时只有闹钟这是 select 在设备启动仅被触发之前编辑的。
我的接收器class:-
public class alarmreceiver extends BroadcastReceiver {
int id=0;
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Alarm running", Toast.LENGTH_SHORT).show();
start(context,id);
}
static void start(Context context,int id) {
Intent intent = new Intent(context, notification_receiver.class);
PendingIntent pendingintent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
if (id==1) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR, 11);
calendar.set(Calendar.MINUTE, 9);
calendar.set(Calendar.AM_PM, Calendar.AM);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingintent);
}
else
if (id==2) {
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(), 60 * 1000
, pendingintent);
}
}
我在按钮点击侦听器下调用这个函数是这样的:-
对于每日通知:-
alarmreceiver.start(getApplicationContext(),1);
对于每小时通知:-
alarmreceiver.start(getApplicationContext(),2);
此代码:
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(), 60 * 1000, pendingintent);
设置每分钟而不是每小时响起的重复闹钟!
另外,这段代码设置了一个闹钟,每分钟响一次。 setRepeating()
的第二个参数是第一次报警的时间。您已经通过 SystemClock.elapsedRealtime()
,这基本上意味着 "now"。
我正在制作一个通知应用程序,为此我正在为 运行 使用广播接收器 class 的通知使用预定的警报,我正在提示用户每天或每小时 select通知,我在同一个接收器中使用相同的功能定义两个警报并且它工作正常但是当我重新启动我的设备时出现问题,当我重新启动它时两个警报(每天和每小时)都在我只设置时被触发例如,如果我为 11:20 A.M 设置了一个闹钟并每小时重启一次我的设备,而这个 11:20 一个都被触发,我希望当我重启我的设备时只有闹钟这是 select 在设备启动仅被触发之前编辑的。
我的接收器class:-
public class alarmreceiver extends BroadcastReceiver {
int id=0;
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Alarm running", Toast.LENGTH_SHORT).show();
start(context,id);
}
static void start(Context context,int id) {
Intent intent = new Intent(context, notification_receiver.class);
PendingIntent pendingintent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
if (id==1) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR, 11);
calendar.set(Calendar.MINUTE, 9);
calendar.set(Calendar.AM_PM, Calendar.AM);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingintent);
}
else
if (id==2) {
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(), 60 * 1000
, pendingintent);
}
}
我在按钮点击侦听器下调用这个函数是这样的:- 对于每日通知:-
alarmreceiver.start(getApplicationContext(),1);
对于每小时通知:-
alarmreceiver.start(getApplicationContext(),2);
此代码:
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(), 60 * 1000, pendingintent);
设置每分钟而不是每小时响起的重复闹钟!
另外,这段代码设置了一个闹钟,每分钟响一次。 setRepeating()
的第二个参数是第一次报警的时间。您已经通过 SystemClock.elapsedRealtime()
,这基本上意味着 "now"。