【问题标题】:Android location update every minute每分钟更新一次安卓位置
【发布时间】:2013-06-18 00:24:43
【问题描述】:

我目前正在编写一个应用程序,它每分钟(或其他指定的时间量)接收位置数据并将其发送到服务器。

我注意到的问题是: 当我使用连接到电源的应用程序时,它可以完美运行 - 以定义的间隔发送更新。 当我在电池上使用它时,它会随机发送更新。

对于我的应用程序,我使用计时器来指定更新间隔。此计时器在后台服务中运行。我在计时器中请求更新,并在收到位置时删除更新。 我的代码片段:

    private class mainTask extends TimerTask
    { 
        public void run() 
        {
            toastHandler.sendEmptyMessage(0); 
        }
    } 

    private final Handler toastHandler = new Handler()
    {
        @Override
        public void handleMessage(Message msg)
        {
            date = date.getInstance(); //used to set time of update.

            if(!GPSupdating)
            {
                locationManager.requestLocationUpdates("gps", 0, 0, locationListenerGPS);
                GPSupdating = true;
            }
        }
    };

我的位置监听器:

    LocationListener locationListenerGPS = new LocationListener() 
    {

        public void onLocationChanged(Location updatedLocation) 
        {
            myGPSLocation = updatedLocation;
            haveLocationGPS = true;
            locationManager.removeUpdates(locationListenerGPS);
            GPSupdating = false;
        }

        public void onStatusChanged(String provider, int status, Bundle extras) {}

        public void onProviderEnabled(String provider) {}

        public void onProviderDisabled(String provider) {}
    };  

你知道为什么这不能正常工作吗?

【问题讨论】:

  • 我在后台运行 "TIMER" 时遇到了同样的问题 "service" 直到今天我还没有得到任何理由......所以我使用了 Alram Manager Timer 的地方,效果很好
  • 感谢您的回答。您能否向我发送一些您使用警报管理器而不是计时器的示例代码?这会很有帮助。

标签: android timer location


【解决方案1】:

这不是一个好的解决方案 - 每分钟启用/禁用监听器。

最好尝试以下方法:

1) 将最小更新时间(在 requestLocationUpdates 中)设置为一分钟,并在更新监听器中将数据发送到服务器:

locationManager.requestLocationUpdates("gps", 60*1000, 0, locationListenerGPS);

如果您需要更准确的更新间隔,那么:

2) 启动单独的线程并在其上启用 GPS 更新。将最后一个位置存储在线程或服务变量中。同时启动计时器并在计时器滴答时将位置发送到服务器。

【讨论】:

    【解决方案2】:

    尝试使用标准来管理电源。将电源要求设置为 POWER_LOW。不过你会失去一些准确性。

    LocationManager locationManager= (LocationManager) getSystemService(context);
            Criteria criteria = new Criteria();
                criteria.setAccuracy(Criteria.ACCURACY_FINE);
                criteria.setPowerRequirement(Criteria.POWER_LOW);
                provider = locationManager.getBestProvider(criteria, true);
    

    【讨论】:

      【解决方案3】:

      每分钟启用和禁用一次 GPS 不会节省能源。要么选择更大的间隔(5 分钟),要么每秒获取一次位置。
      然后将该位置存储在lastValidLocation 文件中,启动您自己的计时器,并每分钟读出一次lastValidLocation。如果更改,则发送到服务器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-03
        • 1970-01-01
        • 2011-11-09
        • 1970-01-01
        • 2020-06-23
        相关资源
        最近更新 更多