Java AlarmManager不总是执行
我正在开发一款android应用程序,每5分钟向服务器发送一次帖子,这样服务器就可以检查手机是否连接 我正在使用Java AlarmManager不总是执行,java,android,alarmmanager,android-pendingintent,android-broadcastreceiver,Java,Android,Alarmmanager,Android Pendingintent,Android Broadcastreceiver,我正在开发一款android应用程序,每5分钟向服务器发送一次帖子,这样服务器就可以检查手机是否连接 我正在使用AlarmManager,向BroadcastReceiver发送广播PendingEvent,后者向服务器发送post。问题是它并不总是执行: Intent myIntent = new Intent(Inicio.this, NetworkStatusReceiver.class); PendingIntent pendingIntent = PendingIntent.getBr
AlarmManager
,向BroadcastReceiver
发送广播PendingEvent
,后者向服务器发送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
类是正确的方法吗
因为我一直在研究5.0+android版本,电源管理与早期的android版本不同。也许
AlarmManager.RTC_WAKEUP
选项在5.0+android版本上不起作用。我做了一些研究,发现了一些似乎有效的方法。从今天早上开始,我实施了它,行为有了很大的改善。我意识到拥有一个BroadcastReceiver
我可以只设置一次警报,然后在触发警报时在BroadcastReceiver
本身上再次设置另一个警报
我还为pendingent
使用了标志pendingent.flag\u UPDATE\u CURRENT
(因为报警pendingent
可以从不同的活动触发)
活动
的代码如下:
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()
方法的代码将是相同的代码,因此报警会再次触发每个系统.currentTimeMillis()+timeInMillis
(以这种方式创建setRepeating()
方法)
通过这种方式,似乎总是会触发警报,因为(我认为)
AlarmManager
中的set()
方法在任何android版本中都能正常工作。我做了一些研究,发现了一些似乎有效的方法。从今天早上开始,我实施了它,行为有了很大的改善。我意识到拥有一个BroadcastReceiver
我可以只设置一次警报,然后在触发警报时在BroadcastReceiver
本身上再次设置另一个警报
我还为pendingent
使用了标志pendingent.flag\u UPDATE\u CURRENT
(因为报警pendingent
可以从不同的活动触发)
活动
的代码如下:
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()
方法的代码将是相同的代码,因此报警会再次触发每个系统.currentTimeMillis()+timeInMillis
(以这种方式创建setRepeating()
方法)
通过这种方式,似乎总是会触发警报,因为(我认为)
AlarmManager
中的set()
方法适用于任何android版本。它发生在任何特定的手机上吗?@saven该应用程序在具有不同android版本的不同设备上使用。大部分是5.0.2或6.+(有一些旧设备运行4.+,有了这些设备,似乎工作正常!)这是否发生在任何特定的手机上?@saven该应用程序在不同的设备上使用,具有不同的android版本。大部分是5.0.2或6.+(有一些旧设备运行4.+,有了这些设备,似乎工作正常!)