AlarmManager随机播放

时间:2015-10-18 21:54:46

标签: android alarmmanager

我正在开发一个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中说不规则的间隔)?如果没有,我做错了什么?

0 个答案:

没有答案