当前位置: 首页 > 知识库问答 >
问题:

Android AlarmManager.set(…):电池电量不足时不会收到通知

衡子琪
2023-03-14

我正试图使用AlarmManager在我的应用程序中安排延迟检查。(具体地说,在用户接近某个位置N分钟后,我希望检查他们是否还在那里,如果还在,则向他们发送通知。)

Intent geofenceIntent = new Intent(context, GeofenceReceiver.class)
// ...intent contents not important...
PendingIntent pi = PendingIntent.getBroadcast(context, 0, geofenceIntent, PendingIntent.FLAG_UPDATE_CURRENT);

Calendar c = Calendar.getInstance();
c.add(Calendar.SECOND, getGeofenceDelaySeconds());
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);
Log.v("Scheduling notification check for "+c.getTime());

当电池电量高(比如50%),一切都像魅力一样工作。但是当它很低(比如说,10%),我得到位置更新,他们调度闹钟似乎-成功,但闹钟从来没有真正触发!

什么给?Android系统在努力节省电力时会停止发送某些类型的更新吗?我该如何解决这个问题(除了在延迟期间保持应用程序的活动,这会导致明显的电池寿命问题)?

共有1个答案

刘野
2023-03-14

原来,这与实时时钟的使用有关。

虽然我找不到它引用的文档(不在AlarmManager中),但这个StackOverflow回答表明,如果手机处于省电模式,AlarmManager.rtc_wakeup警报不会触发。AlarmManager.elapsed_realtime_wakeup警报似乎不会出现此问题,因此我可以通过切换到:

Intent geofenceIntent = new Intent(context, GeofenceReceiver.class)
// ...intent contents not important...
PendingIntent pi = PendingIntent.getBroadcast(context, 0, geofenceIntent, PendingIntent.FLAG_UPDATE_CURRENT);

long millis = SystemClock.elapsedRealtime() + 1000 * getGeofenceDelaySeconds();
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, millis, pi);
 类似资料:
  • 需要一些关于Android新捕获SDK的帮助。我在一个活动中使用以下代码。 我在顶级活动中使用正确的appKey和appid。 我想申请电池电量。我该怎么做?我实现了一个侦听器,但不确定如何发出请求。 好的,接下来我有这个要求: 上面的代码执行往返,并调用属性回调,但属性中包含的信息不是百分比。 这是侦听器(从不调用),即使我的类实现了它并订阅了“事物”。 @覆盖公共无效OnBatteryLeve

  • 问题内容: 表现: 在此代码中,Toast始终显示“不收费!”。我在实际设备上进行了测试,将其插入交流或USB电源时,它仍显示“ Not Charging!”(未充电!)。吐司 问题答案: 您无法通过清单进行注册,因此您不会收到这些广播。您正在尝试从中获得额外收入,而这些没有额外收入(例如)。结果,您将获得默认值。

  • 问题内容: 我刚启动Swift,一直在寻找一种检查电池电量的方法。我找到了该资源并一直在使用它,但是由于某种原因似乎无法使它正常工作。 我不太确定如何解决此问题。有任何想法吗? 问题答案: Xcode 11•Swift 5.1 首先只需启用电池监控: 然后,您可以创建一个计算属性以返回电池电量: 电池电量从0.0(完全放电)到1.0(100%充电)。访问此属性之前,请确保已启用电池监视。如果未启用

  • 问题内容: 当设备的电池电量不足时,我想关闭我的应用程序。我在清单中添加了以下代码。 并在接收器中遵循以下代码 我正在模拟器上运行该应用程序,并使用telnet更改了电池电量。它会更改电池电量,但不会显示任何吐司或记录。 我想念什么?任何帮助表示赞赏!谢谢。 问题答案: 在代码中而不是在文件中注册您的接收器。 或使用接收器收听电池电量。

  • 在产品使用寿命结束时,Polar 鼓励您遵守当地的废弃物处理法规,并在可能的情况下利用电子设备分类收集,将废弃物对环境和人类健康的可能影响降到最低。不要将本产品作为未分类的城市垃圾处理。 为电池充电 Verity Sense 内置一块可充电电池。可充电电池的充电循环次数有限。您可在电容量明显下降之前,对电池进行 500 多次的充放电。充电循环次数还会因使用及工作条件而异。 在充电前,请确保您的 V

  • 在产品无法再次为您提供服务时, Polar 鼓励您按照地方废弃物处置条例,如果可能,对电子设备进行分类收集,以尽量降低废弃物对环境和人类健康可能产生的影响。不要将本产品作为未分类的城市垃圾处理。 电池充电 在充电前,请确保您的手表和连接线的充电触点上没有水分、灰尘或脏污。轻轻擦掉脏污或水分。手表沾了水时,不要充电。 手表配备了一块内部可充电电池。可充电电池的充电次数有限。您可在电容量明显下降之前,