Amo*_*uli 4 android location alarmmanager wakelock
我正在建设应用程序,可以NETWORK_PROVIDER在不使用的情况下在背景中定期使用GPS_PROVIDER.我正在使用ALARM_SERVICE和WakeLock(PARTIAL_WAKE_LOCK).但我面临的问题是,一旦屏幕熄灭,互联网连接就会断开连接.当我解锁手机时,我开始接收位置,但是当屏幕熄灭时,我没有获得位置.
是因为:
我正在使用GpsTracker类从这里获取位置并定期使用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);
根据文件 WifiManager.WifiLock
允许应用程序使Wi-Fi无线电保持唤醒状态。通常,当用户一段时间未使用设备时,Wi-Fi无线电可能会关闭。获取WifiLock可使无线电保持开启状态,直到释放锁为止。多个应用程序可能拥有WifiLock,只有在任何应用程序中都没有WifiLock时,才允许关闭收音机。
我想你需要这个锁。如果设备连接到WiFi,则获取此锁。但是,求求您
请注意,WifiLocks不能覆盖用户级别的“已启用Wi-Fi”设置,也不能覆盖飞行模式。当Wi-Fi已打开但设备处于空闲状态时,它们只是使收音机保持关闭状态。
除非您的应用程序有充分的理由保持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在其设备上包含了一些可能也表现出这种行为的节电选项.