7

我正在考虑设置两个单独的警报来每小时收集用户的位置数据,一个每 59 分钟响一次以“连接”客户端,第二个用于实际获取位置,然后断开客户端。

在电池寿命方面,如果获取用户的位置将是应用程序的主要消耗,我还应该考虑做些什么?或者,是否有不同的方法来设置两个警报?我最初只有一个警报,但执行 (!mLocationClient.isConnected) 然后进行连接检查并没有给客户端足够的时间来连接。

感谢您的洞察力。

这两个警报会像这样响起:

private int PERIODIC_UPDATE = 60000*60;  //gets location and disconnects every hour
private int PERIODIC_RECONNECTION_UPDATE = 60000*59;  //connects 1 minute before getLocation call

    Timer toReconnect = new Timer();
    toReconnect.schedule(new TimerTask() {

        @Override
        public void run() {
            mLocationClient.connect();
        }
    }, 5000, PERIODIC_RECONNECTION_UPDATE);

    Timer theTimer = new Timer(); 
    theTimer.schedule(new TimerTask(){
        @Override
        public void run() {
            try {
                if(!mLocationClient.isConnected()) {
                    mLocationClient.connect();
                    //This will not have much affect because cannot so quickly, will remove. 
                }

                Location theLocation = mLocationClient.getLastLocation();
                if(theLocation!=null) {
                    checkPostLocation(theLocation); 

                    mLocationClient.disconnect();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }   
        }}, 5000, PERIODIC_UPDATE);
4

2 回答 2

4

请参阅 Android 开发人员文档中的“接收位置更新”部分,以使用新的 Fused LocationProvider 详细讨论此主题:

http://developer.android.com/training/location/receive-location-updates.html

这使您可以选择将带有 LocationListener 的 Intent 注册到 Fused LocationProvider 中,当内部 Google 服务框架被认为“有效”时,它会自动触发。我相信这个框架在优化电源使用方面具有更大的潜力,因为它比应用程序注册的计时器更了解系统中发生的其他事情。

以下是注册具有不同电源优先级的侦听器的选项,这将导致不同级别的电池消耗,如上述文档中所列:

  • PRIORITY_BALANCED_POWER_ACCURACY - 与 setPriority(int) 一起使用以请求“块”级别的准确性。块级精度被认为是大约 100 米的精度。使用这样的粗略精度通常会消耗更少的功率。
  • PRIORITY_HIGH_ACCURACY - 与 setPriority(int) 一起使用以请求最准确的可用位置。这将返回可用的最佳位置(以及最大的能量消耗潜力)。
  • PRIORITY_NO_POWER - 与 setPriority(int) 一起使用,以请求零额外功耗的最佳精度。除非其他客户端请求位置更新,否则不会返回任何位置,在这种情况下,此请求将充当这些位置的被动侦听器。
于 2013-06-17T19:41:12.047 回答
2

你真的需要跟踪用户吗?

如果它只是关于 UI,那么使用 getLastKnownLocation(PASSIVE_PROVIDER) 并且假设他们在其他地方使用手机上的定位服务,你应该得到一些半准确的东西。

如果您需要实际对用户进行三角测量,请实现不同的供应商使用不同的电池。被动 < 网络 < GPS。

您找到用户的位置越多,GPS 消耗的电池电量和时间就越多。

按计划启动服务,1 小时或其他任何时间,只需要一项服务。最多只能活 1 分钟(或更短),收听所有位置提供商。在分钟或准确性足够好后,您保存结果并关闭服务。

于 2013-06-17T04:34:23.663 回答