bas*_*i82 5 android intervals alarmmanager
我阅读量很大,但我认为这个问题没有明确/完整的答案.
首先澄清一些问题:这个问题与电话节省电话有关,但更多关于精确计时和我是Android的新手.
现在让我更深入地解释这个问题.我有一个报警管理器,它将在给定的时间间隔(每2分钟)调用一次吐司(为简单起见)manager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(), interval, pendingIntent);
.上面将调用BroadcastReciver上的onReceive()方法.
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//Toast ....bala blah
}}
Run Code Online (Sandbox Code Playgroud)
现在这是API <19的确切间隔但是在API => 19时,setRepeating()不再是准确的了!我发现有人建议(在其他表格上)使用setExact().但是没有关于如何在Interval中使用setExact()的示例或明确说明(或者我找不到).据我所知,setExact()与offRepeating()不同,因此根据其他人的说法,下一个时间表需要通过onReceive()设置(再次我找不到一个例子;(.无论如何这就是我现在所处的位置).我真的感谢任何评论或建议或链接或示例......
我希望我能够清楚地问我的问题,顺便说一句,如果有另一种方法(在API> 19中以精确的间隔运行任务,请让我知道)非常感谢
你可以使用setExact类似的setRepeating.
void scheduleAlarm(Context context) {
AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent yourIntent = new Intent();
//TODO configure your intent
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, MyApplication.ALARM_REQUEST_CODE, yourIntent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, timeToWakeUp, alarmIntent);
}
Run Code Online (Sandbox Code Playgroud)
这两个区别是:
您必须在onReceiveBroadcastReceiver中安排下一次出现.
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//TODO process alarm
scheduleAlarm(context);
}}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
4368 次 |
| 最近记录: |