Android警报管理器在确切时间触发

问题描述 投票:0回答:1

我有一个需要在提供的确切时间执行任务的应用程序,就像我使用的股票android闹钟setExactAndAllowWhileIdle() / setExact()一样。但是BroadcastReciever会在几分钟后(有时在打开应用后)触发,是否有任何解决方法?

警报设置员代码

// set Alarm


Intent intent = new Intent(this.context, AlarmReceiver.class);
 intent.putExtra("alarmInfo", extraInfo);
 intent.setAction(Long.toString(System.currentTimeMillis()));
 PendingIntent pendingIntent = PendingIntent.getBroadcast(this.context, 123456, intent, 0);
AlarmManager alarmManager = (AlarmManager) this.context.getSystemService(Context.ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {             
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, finalTime - 400, pendingIntent);
} else {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, finalTime - 400, pendingIntent);

BroadcastReciever

setNextAlarm();
Log.d("RESULT", "fired");
Intent alarmIntent = new Intent(context, AlarmSoundService.class);
//        Log.d("extra", "alarmInfo: " + intent.getStringExtra("alarmInfo"));
alarmIntent.putExtra("alarmInfo", intent.getStringExtra("alarmInfo"));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    context.startForegroundService(alarmIntent);
} else {
    context.startService(alarmIntent);
}

setNextAlarm()是我提供的用于设置将来任务警报的先前代码。

java android alarmmanager alarm
1个回答
-1
投票
private AlarmManager alarmMgr;
private PendingIntent alarmIntent;
...
alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

// Set the alarm to start at 8:30 a.m.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 8);
calendar.set(Calendar.MINUTE, 30);

// setRepeating() lets you specify a precise custom interval--in this case,
// 20 minutes.
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
        1000 * 60 * 20, alarmIntent);
© www.soinside.com 2019 - 2024. All rights reserved.