重新安排IntentService与AlarmManager - 意图额外的信息被忽略 [英] Reschedule IntentService with AlarmManager - intent extra info is ignored

查看:232
本文介绍了重新安排IntentService与AlarmManager - 意图额外的信息被忽略的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有最初开始按钮上点击一个IntentService:

I have an IntentService that is initially started with the click on a button:

        Intent intent = new Intent(this, ProximityService.class);
        intent.putExtra("com.hybris.proxi.triggerTime", 5000l);
        PendingIntent pendingIntent = PendingIntent.getService(this,  0,  intent, 0);
        long trigger = System.currentTimeMillis() + (5*1000);
        alarmManager.set(AlarmManager.RTC_WAKEUP, trigger, pendingIntent);

这工作得很好。但后来我想再次执行相同intentservice,从intentservice内。这里的想法是,我可以改变下的执行时间,以节省电池

This works nicely. But then I am trying to execute the same intentservice again, from within the intentservice. The idea here is that I can vary the next execution time to save battery.

@Override
protected void onHandleIntent(Intent intent) {
    Log.d("demo", "ProximityService... STARTING");
    Log.d("demo", "Intent has extra with key com.hybris.proxi.triggerTime" + intent.hasExtra("com.hybris.proxi.triggerTime"));

    long lastTriggerTime = intent.getLongExtra("com.hybris.proxi.triggerTime", -1);
    Log.d("demo", "Last trigger time: " + lastTriggerTime);

    alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

    //trigger me again - TODO change this based on closeness to store
    //TODO does not work, somehow triggertime is not incremented
    if (lastTriggerTime < 50000)
    {
        long newTriggerTime = lastTriggerTime * 2;

        Intent serviceIntent = new Intent(this, ProximityService.class);
        serviceIntent.putExtra("com.hybris.proxi.triggerTime", (long)newTriggerTime);
        Log.d("demo","New triggerTime set in new intent is : " + serviceIntent.getLongExtra("com.hybris.proxi.triggerTime", -1));

        PendingIntent pendingIntent = PendingIntent.getService(this,  0,  serviceIntent, 0);
        long trigger = System.currentTimeMillis() + newTriggerTime;
        alarmManager.set(AlarmManager.RTC_WAKEUP, trigger, pendingIntent);
        Log.d("demo", "Alarm was set with trigger time " + newTriggerTime);
    } 
    else {
        Log.d("demo", "Not rescheduling alarm: lastTriggerTime is " + lastTriggerTime);
    }


    Log.d("demo", "ProximityService... DONE");

}

问题在于

intent.getLongExtra(com.hybris.proxi.triggerTime,-1);

intent.getLongExtra("com.hybris.proxi.triggerTime", -1);

总是返回初始值5000 - 所以下一个警报没有处于明显增加,促进触发时间安排。不知何故,意图额外的新触发时间不工作设定...

always returns the initial value 5000 - so the next alarm is not scheduled at an inceasing trigger time. Somehow, the setting of the intent extra for the new trigger time does not work...

任何想法?

推荐答案

您需要使用 PendingIntent.FLAG_UPDATE_CURRENT

更改从code
的PendingIntent的PendingIntent = PendingIntent.getService(这一点,0,serviceIntent,0);
 到

Change your code from PendingIntent pendingIntent = PendingIntent.getService(this, 0, serviceIntent, 0); to

PendingIntent pendingIntent = PendingIntent.getService(this,
                        0,  serviceIntent, PendingIntent.FLAG_UPDATE_CURRENT);

这篇关于重新安排IntentService与AlarmManager - 意图额外的信息被忽略的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆