我正在制作一个通知应用程序,为此我使用预定的警报来使用广播接收器类运行通知,我提示用户从每日或每小时的通知中选择,我在相同的接收器中定义两个警报功能,它工作正常,但问题来了,当我重新启动我的设备,当我重新启动时,警报(每日和每小时)被触发,当我只设置一个例如,如果我设置警报为上午11点20分和每小时重新启动我的设备一次,这一次是11:20一个都被触发,我希望当我重新启动设备时,只有在设备启动之前选择的警报才会被触发。
我的接收器类: -
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);
答案 0 :(得分:0)
此代码:
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(), 60 * 1000, pendingintent);
设置一个每分钟都会响起的重复闹钟,而不是每小时!
此外,此代码设置的警报每分钟都会立即响起。 setRepeating()
的第二个参数是第一次报警的时间。您已通过SystemClock.elapsedRealtime()
,这基本上意味着"现在"。