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

时间:2013-11-16 05:43:58

标签: android location alarmmanager wakelock

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

是因为:

  1. 一旦屏幕关闭,互联网连接就会暂停,当我解锁屏幕时,我会收到数据使用的USSD代码消息,这是否意味着一旦屏幕关闭我的互联网连接就会消失?
  2. 即使互联网连接已开启,但由于屏幕处于关闭状态,位置也无法在后台更新。
  3. 我正在使用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);
    

2 个答案:

答案 0 :(得分:5)

根据文件WifiManager.WifiLock

  

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

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

  

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

答案 1 :(得分:5)

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

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

Keep Wi-Fi on during sleep

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

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

相关问题