Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 广播接收机延迟发射_Android_Broadcastreceiver_Alarmmanager_Android Alarms - Fatal编程技术网

Android 广播接收机延迟发射

Android 广播接收机延迟发射,android,broadcastreceiver,alarmmanager,android-alarms,Android,Broadcastreceiver,Alarmmanager,Android Alarms,我有一个计时器和一个按钮,我想在用户在指定时间单击按钮时设置一个警报 当我点击按钮时,它可以很好地得到小时数,但有时会在指定的时间触发警报,但并不总是。在指定时间激发的次数少于未激发的次数。大多数情况下,BroadcastReceiver没有在指定时间触发,它会延迟触发 这是我现在拥有的代码: 报警等级(代码参考广播接收器) 其中hour和minutes是从TimePicker检索到的小时和分钟 在AlarmReceiver类上 public class AlarmReceiver extend

我有一个
计时器
和一个
按钮
,我想在用户在指定时间单击
按钮时设置一个警报

当我点击按钮时,它可以很好地得到小时数,但有时会在指定的时间触发警报,但并不总是。在指定时间激发的次数少于未激发的次数。大多数情况下,
BroadcastReceiver
没有在指定时间触发,它会延迟触发

这是我现在拥有的代码:

报警等级(代码参考广播接收器)

其中
hour
minutes
是从
TimePicker
检索到的小时和分钟

在AlarmReceiver类上

public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("prove", "We enter on BroadcastReceiver");
    }
}
在Manifest.xml上

<receiver
    android:name=".AlarmReceiver"
    android:enabled="true" >
</receiver>
如您所见,
BroadcastReceiver
已经在
16:50
17:00
发射了两次,我认为它们应该在
16:48
16:53
发射,因为我已经设置了它们之间的延迟时间为5分钟,而不是本例中的10分钟

那么,我该怎么做才能在准确的时间发出警报,而不是延迟发出警报呢?我是否缺少一些配置


提前谢谢

使用设置不精确重复

alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(), 1000 * 60 * 5, alarmIntent);
你可以检查我的代码我在我的应用程序中做了什么。我工作得很好

pendingIntent = PendingIntent.getBroadcast(this, _id, myIntent, PendingIntent.FLAG_CANCEL_CURRENT);

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, timeToAlarm, AlarmManager.INTERVAL_DAY, pendingIntent);
如前所述,
setRepeating
是不精确的

从API 19开始,所有重复报警都是不精确的。如果你的申请 需要精确的交付时间,则必须使用一次性精确警报, 按上述每次重新安排。遗留应用程序 targetSdkVersion早于API 19,将继续具有所有 他们的警报,包括重复警报,被视为精确警报

因此,要在API 19的准确时间触发警报,请使用,并在每个警报内设置下一个警报

计划在规定时间准确发出警报


如果有任何其他疑问,请告诉我,但我需要警报将在指定的时间准确。在文档中,long,long,android.app.pendingent)写道:
计划一个重复警报,该警报具有不精确的触发时间要求;例如,一个每小时重复一次的警报,但不一定在每小时的顶部。
我有一个问题,如果我有一个警报在准确的时间重复两到三次。例如,在
16:48
16:50
16:52
。我是否应该添加三个调用
setExact
函数的事件?如果您想将警报设置为3组,并且它们没有特定的模式,那么我认为您应该使用
setExact
三次,是的。否则,如果您希望警报每2分钟触发一次(例如),则只需使用一次
setExact
,然后在接收器中重新安排,如上所述。是的,它们将具有特定的模式,例如每2分钟一次。但我不明白他们说的
reschedule
setExact
只安排一次闹钟是什么意思。因为你需要你的闹钟重复,你需要在你的
onReceive
内调用
setExact
,下一个闹钟的时间,这就是重新安排的意思。所以
reschedule
意味着每次都要重新呼叫广播接收器?
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(), 1000 * 60 * 5, alarmIntent);
pendingIntent = PendingIntent.getBroadcast(this, _id, myIntent, PendingIntent.FLAG_CANCEL_CURRENT);

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, timeToAlarm, AlarmManager.INTERVAL_DAY, pendingIntent);