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

问题描述 投票:4回答:2

我正在构建应用程序,可以在背景中定期使用NETWORK_PROVIDER获取位置,而无需使用GPS_PROVIDER。我正在使用ALARM_SERVICEWakeLockPARTIAL_WAKE_LOCK)。但我面临的问题是,一旦屏幕熄灭,互联网连接就会断开连接。当我解锁手机时,我开始接收位置,但是当屏幕熄灭时,我没有获得位置。

是因为:

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

我正在使用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);
android location alarmmanager wakelock
2个回答
5
投票

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

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

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

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


5
投票

根据文件WifiManager.WifiLock

允许应用程序保持Wi-Fi无线电清醒。通常,当用户暂时不使用设备时,Wi-Fi无线电可能会关闭。获取WifiLock将保持收音机开启,直到锁定被释放。多个应用程序可能会保留WifiLock,并且只有在任何应用程序中没有保存WifiLock时才允许关闭无线电。

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

请注意,WifiLocks无法覆盖用户级“Wi-Fi Enabled”设置,也无法覆盖飞行模式。当Wi-Fi已经开启但设备处于空闲状态时,它们只是让收音机关闭。

© www.soinside.com 2019 - 2024. All rights reserved.