Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AlarmManager.set(…):电池电量不足时从未收到通知_Android_Alarmmanager - Fatal编程技术网

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

Android AlarmManager.set(…):电池电量不足时从未收到通知,android,alarmmanager,Android,Alarmmanager,我正在尝试使用AlarmManager在我的应用程序中安排延迟检查。(具体来说,在用户接近某个位置N分钟后,我想检查他们是否还在,如果还在,则向他们发送通知。) 我通过检查他们是否已进入我的位置更新接收器中的区域来实现这一点,如果他们已进入,则进行如下调度: Intent geofenceIntent = new Intent(context, GeofenceReceiver.class) // ...intent contents not important... PendingIntent

我正在尝试使用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在试图节约能源时是否会停止发送某些类型的更新?我该如何解决这个问题(除了在延迟期间保持应用程序处于活动状态,这会导致电池寿命出现明显问题)?

事实证明,这与使用实时时钟有关

虽然我找不到它引用的文档(它不在AlarmManager中),但它表明,如果手机处于省电模式,则不会触发报警<代码>AlarmManager。已用\u REALTIME\u 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);

你找到解决办法了吗?我也在努力解决这个问题。