我正在开发一个Android应用程序并且具有反复发生的操作,即使应用程序已关闭。我使用android的AlarmManager
来安排重复事件,如下所示:
广播接收器代码(相关部分):
@Override
public void onReceive(Context context, Intent intent){
this.lastContext = context;
Log.i("Instructions", "Getting instructions...");
Session.device = (Device)intent.getExtras().get("device");
Session.user = (User)intent.getExtras().get("user");
Session.data = (Data)intent.getExtras().get("data");
Session.deviceManager = (DevicePolicyManager)context.getSystemService(Context.DEVICE_POLICY_SERVICE);
Session.compAdmin = new ComponentName(context, ControlAdmin.class);
new ApiRequest(Api.makeDeviceRequest("instruction.php")).builder()
.addOption("username", Session.user.getUsername())
.addOption("password", Session.user.getPassword())
.addOption("device_id", Session.device.getNetId())
.setCallback(this)
.execute();
}
以上代码只是向在线API发送GET请求,以下载包含设备信息的字符串。
这是我使用AlarmManager注册广播接收器的方式:
private static final int REQUEST_CODE = 48432;
public static void register(Context context, Class<? extends BroadcastReceiver> receiver, long delay, long interval, String[] keys, Parcelable[] objects){
Intent intent = new Intent(context, receiver);
if(keys != null && objects != null)
for(int i = 0; i < keys.length && i < objects.length; i++)
intent.putExtra(keys[i], objects[i]);
PendingIntent sender = PendingIntent.getBroadcast(context, REQUEST_CODE, intent, 0);
long firstTime = System.currentTimeMillis() + delay;
AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, firstTime, interval, sender);
}
我如何使用上面的注册方法:
register(context, InstructionsReceiver.class, 0L, 5000L, new String[] { "user", "device", "data" }, new Parcelable[] { Session.user, Session.device, Session.data });
广播接收器 接收广播但不是以5秒的间隔接收,正如我在上面的示例中所写的那样。相反,间隔在60秒以上是随机的。我不明白为什么会这样。
这是正常的(在AlarmManager docs&gt; API 19中说不规则的间隔)?如果没有,我做错了什么?