AlarmManager 并不总是执行
AlarmManager not always executing
我正在开发一个 android 应用程序,它每 5 分钟向服务器发送一个 post,这样,服务器可以检查 phone 是否有连接。
我正在使用 AlarmManager
,向 BroadcastReceiver
发送广播 PendingIntent
,然后向服务器发送 post。问题是它并不总是执行:
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
class 是正确的方法吗?
因为我一直在研究 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 版本。
我正在开发一个 android 应用程序,它每 5 分钟向服务器发送一个 post,这样,服务器可以检查 phone 是否有连接。
我正在使用 AlarmManager
,向 BroadcastReceiver
发送广播 PendingIntent
,然后向服务器发送 post。问题是它并不总是执行:
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
class 是正确的方法吗?
因为我一直在研究 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 版本。