gpt4 book ai didi

android - 在日期和时间更改时重置/取消警报时的 AlarmManager Bug

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:37 26 4
gpt4 key购买 nike

我想以某个常规 间隔向服务器发送数据。所以,我正在使用 AlarmManager 来做同样的事情。它工作正常,但问题是当我取消时,日期/时间的警报发生变化。那时警报在被取消之前再次触发,这使我的应用程序变得更糟,因为 extra 数据以 不规则 间隔发送到 server

这是我的 BroadCastReceiver 类和 AlarmManager

 public class MyReceiver extends BroadcastReceiver{

AlarmManager mgr;
PendingIntent pi;
Intent intent;
public static boolean flag = false;

@Override
public void onReceive(final Context arg0, Intent arg1) {

if(arg1.getAction().equals("android.intent.action.TIME_SET")){
Log.d("MyReceiver", "Time set");

mgr = (AlarmManager) arg0.getSystemService(Context.ALARM_SERVICE);
intent = new Intent(arg0, TestService.class);
intent.putExtra("test", "testvalue");
pi = PendingIntent.getService(arg0, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

if(!flag){
mgr.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10000, 5000, pi);
flag = true;
}
else{
mgr.cancel(pi);
pi.cancel();
flag = false;
}
}
}
}

下面是带有 Logcat 输出的屏幕截图,解释了取消警报后它会在取消后再次触发。

enter image description here

正如您在 Logcat 输出中看到的那样,黑色箭头 显示了我更改时间以取消警报的位置,红色箭头 显示了之后再次取消警报,它在取消之前再次触发,这是不应该发生的。那么,任何人都可以告诉我为什么会发生这种情况以及我应该怎么做才能限制警报在取消之前再次触发。

注意:- 这仅在我尝试增​​加日期/时间(例如从 10:00 到 11:00)时发生,当我减少时间(例如 10:00 到 9:00)时效果完美。

最佳答案

在我这边看不到 LogCat,但是查看代码,我不确定,被调用的服务 (TestService) 是如何被杀死/停止的?我想你需要以某种方式阻止它。此外,不建议在广播接收器中执行长时间运行的任务。您是否已确认在触发 mgr.cancel(pi) 后发生了服务停止事件?

关于android - 在日期和时间更改时重置/取消警报时的 AlarmManager Bug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9124918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com