我正在构建应用程序,可以在背景中定期使用NETWORK_PROVIDER
获取位置,而无需使用GPS_PROVIDER
。我正在使用ALARM_SERVICE
和WakeLock
(PARTIAL_WAKE_LOCK
)。但我面临的问题是,一旦屏幕熄灭,互联网连接就会断开连接。当我解锁手机时,我开始接收位置,但是当屏幕熄灭时,我没有获得位置。
是因为:
我正在使用GpsTracker类从here获取位置并定期使用AlarmManager获取位置。也在LatLongBroadcastReceiver
班我正在取得一个位置。
Intent intent = new Intent(GPSlatlongActivity.this,
LatLongBroadcastReceiver.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
pendingIntent = PendingIntent.getBroadcast(
GPSlatlongActivity.this.getApplicationContext(), 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(),
(AlarmManager.INTERVAL_FIFTEEN_MINUTES / 15),
pendingIntent);
除非您的应用程序有充分的理由保持Wi-Fi连接,否则您应该尝试尊重用户在屏幕锁定时禁用WiFi的首选项。您的应用程序将通过使用任何类型的锁定快速使设备消耗更多功率。正如其他人所提到的,在你的情况下,你将需要PowerManager.PARTIAL_WAKE_LOCK
来保持CPU运行(不阻止屏幕锁定)和WifiManager.WakeLock
以保持Wi-Fi连接。
在高级Wi-Fi设置下,您可能会在Wi-Fi的系统设置下找到导致此行为的设置:
通过在具有移动数据的设备上禁用此设置,您的网络位置监听器仍然可以正常工作,因为Android将继续在后台使用Google的Location API来解析基于移动电话塔的设备位置。
如果您的设备也关闭移动数据,也许某些省电应用程序正在禁用它。 BlueEFFICIENCY和Juice Defender是一些可以选择进行此优化的应用程序,但HTC和Sony在其设备上包含了一些可能也表现出这种行为的节能选项。
允许应用程序保持Wi-Fi无线电清醒。通常,当用户暂时不使用设备时,Wi-Fi无线电可能会关闭。获取WifiLock将保持收音机开启,直到锁定被释放。多个应用程序可能会保留WifiLock,并且只有在任何应用程序中没有保存WifiLock时才允许关闭无线电。
我想你需要这个锁。如果设备连接到WiFi,则获取此锁。但是,求求您
请注意,WifiLocks无法覆盖用户级“Wi-Fi Enabled”设置,也无法覆盖飞行模式。当Wi-Fi已经开启但设备处于空闲状态时,它们只是让收音机关闭。