繁体   English   中英

AlarmManager并不总是执行

[英]AlarmManager not always executing

我正在开发一个Android应用程序,每5分钟发送一个帖子到服务器,这样,服务器可以检查手机是否有连接。

我正在使用AlarmManager ,将广播PendingIntent发送到BroadcastReceiver ,后者向服务器发送帖子。 问题是它并不总是执行:

Intent myIntent = new Intent(Inicio.this, NetworkStatusReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(Inicio.this,
                                                         0,
                                                         myIntent,
                                                         0);
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
int interval = 60000*5;
manager.setRepeating(AlarmManager.RTC_WAKEUP,
                     System.currentTimeMillis(),
                     interval,
                     pendingIntent);

AlarmManager类是否是正确的方法?

因为我一直在研究5.0+以上的Android版本,电源管理与早期的Android版本不同。 也许AlarmManager.RTC_WAKEUP选项不适用于5.0+以上的Android版本。

我做了一些研究,我发现了一些似乎有用的东西。 从今天早上开始,我实施了它,行为也得到了很大改善。 我意识到拥有一个BroadcastReceiver我可以设置一次警报,并在触发警报时再次在BroadcastReceiver上设置另一个警报。

我还为PendingIntent使用了标志PendingIntent.FLAG_UPDATE_CURRENT (因为可以从不同的活动触发警报PendingIntent

Activity的代码是这样的:

Intent myIntent = new Intent(context, NetworkStatusReceiver.class);
    final PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    final AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    manager.set(AlarmManager.RTC_WAKEUP,System.currentTimeMillis() + timeInMillis, pendingIntent);

并且BroadcastReceiver.OnReceive()方法的代码将是相同的代码,因此警报再次触发每个System.currentTimeMillis() + timeInMillis (以这种方式创建setRepeating()方法)

这种方式似乎总是触发警报,因为(我认为)来自AlarmManager set()方法适用于任何Android版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM