我正在开发一个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版本。
答案 0 :(得分:0)
我做了一些研究,我发现了一些似乎有用的东西。从今天早上开始,我实施了它,行为也得到了很大改善。我意识到有一个BroadcastReceiver
我可以设置一次警报,并在触发警报时再次在BroadcastReceiver
上设置另一个警报。
我还为PendingIntent.FLAG_UPDATE_CURRENT
使用了标记PendingIntent
(因为警报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()
方法创建这种方式)
这样看起来警报总是被触发,因为(我认为)来自set()
的{{1}}方法适用于任何Android版本。