Android手机锁定后暂停互联网连接

Amo*_*uli 4 android location alarmmanager wakelock

我正在建设应用程序,可以NETWORK_PROVIDER在不使用的情况下在背景中定期使用GPS_PROVIDER.我正在使用ALARM_SERVICEWakeLock(PARTIAL_WAKE_LOCK).但我面临的问题是,一旦屏幕熄灭,互联网连接就会断开连接.当我解锁手机时,我开始接收位置,但是当屏幕熄灭时,我没有获得位置.

是因为:

  1. 一旦屏幕关闭,互联网连接就会暂停,当我解锁屏幕时,我会收到数据使用的USSD代码消息,这是否意味着一旦屏幕关闭,我的互联网连接就会消失?
  2. 即使互联网连接已启用,但由于屏幕处于关闭状态,位置也不会在后台更新.

我正在使用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);
Run Code Online (Sandbox Code Playgroud)

M-W*_*eEh 6

根据文件 WifiManager.WifiLock

允许应用程序使Wi-Fi无线电保持唤醒状态。通常,当用户一段时间未使用设备时,Wi-Fi无线电可能会关闭。获取WifiLock可使无线电保持开启状态,直到释放锁为止。多个应用程序可能拥有WifiLock,只有在任何应用程序中都没有WifiLock时,才允许关闭收音机。

我想你需要这个锁。如果设备连接到WiFi,则获取此锁。但是,求求您

请注意,WifiLocks不能覆盖用户级别的“已启用Wi-Fi”设置,也不能覆盖飞行模式。当Wi-Fi已打开但设备处于空闲状态时,它们只是使收音机保持关闭状态。

  • 将`PowerManager.PARTIAL_WAKE_LOCK`与`WifiManager.WifiLock`一起使用。 (4认同)

Pau*_*sma 5

除非您的应用程序有充分的理由保持Wi-Fi连接,否则您应该尝试尊重用户在屏幕锁定时禁用WiFi的首选项.您的应用程序将通过使用任何类型的锁定快速使设备消耗更多功率.正如其他人所提到的,在您的情况下,您需要PowerManager.PARTIAL_WAKE_LOCK保持CPU运行(不阻止屏幕锁定)并WifiManager.WakeLock保持Wi-Fi连接.

在高级Wi-Fi设置下,您可能会在Wi-Fi的系统设置下找到导致此行为的设置:

睡觉时保持Wi-Fi开启

通过在具有移动数据的设备上禁用此设置,您的网络位置监听器仍然可以正常工作,因为Android将继续在后台使用Google的Location API来解析基于移动电话塔的设备位置.

如果您的设备也关闭移动数据,也许某些省电应用程序正在禁用它.BlueEFFICIENCYJuice Defender是一些可以选择进行此优化的应用程序,但HTC和Sony在其设备上包含了一些可能也表现出这种行为的节电选项.