QT快速获取最后的已知位置

时间:2017-06-02 04:54:59

标签: android c++ ios qt gps

我正在使用QT为Android,iOS,windows开发跨平台应用程序。我想获得设备当前位置。我正在使用Qt Positioning Api。我使用Samples available编写了C ++代码。应用程序希望以指定的时间间隔(x秒)或指定的距离(y米)以米为单位更新设备位置。请找到下面编写的示例代码。如果网络关闭,代码导致大量电池耗电几乎占整个电池寿命的9%也需要花费大量时间来更新第一个位置。由于要求是在指定的时间间隔连续更新设备位置,不能停止位置更新QGeoPositionInfoSource

Locationhandler.h

#ifndef LOCATIONHANDLER_H
#define LOCATIONHANDLER_H

#include <QObject>
#include <QGeoPositionInfo>
#include <QGeoPositionInfoSource>
#include <QDebug>
#include "main.h"


class LocationHandler : public QObject
{
    Q_OBJECT
    public :
    explicit LocationHandler(QObject *parent = 0);
    QGeoCoordinate getCurrentLocation();
    private :
    QGeoCoordinate currentLocation;
    QGeoPositionInfoSource *source;
    signals :
    public slots :
    void positionUpdated(const QGeoPositionInfo &info);
};
#endif // LOCATIONHANDLER_H

locationhandler.cpp

#include "LocationHandler.h"

LocationHandler::LocationHandler(QObject *parent) : QObject(parent)
{
    source = QGeoPositionInfoSource::createDefaultSource(this);
   if (source) {
       connect(source, SIGNAL(positionUpdated(QGeoPositionInfo)),
                        this, SLOT(positionUpdated(QGeoPositionInfo)));
       source->startUpdates();
       source->setUpdateInterval(60);

   }
}

void LocationHandler::positionUpdated(const QGeoPositionInfo &info)
{
      if(info.isValid())
      {
          currentLocation = info.coordinate();
          qDebug() << "Current Latitude : " << currentLocation.latitude();
          qDebug() << "Current Longitude : " << currentLocation.longitude();
          updateDeviceCordinate(currentLocation);
      }
}

请告诉我,

  1. 有没有办法可以指定GPS更新间隔 时间和距离可以减少CPU活动时间。
  2. 另外我想知道有没有直接的方式我可以得到设备 位置直接使用QT API而没有任何(QT信号)回调 功能很快。
  3. 注意:基于qml的位置更新可能没有用,因为我们希望在C ++代码中实现功能。

1 个答案:

答案 0 :(得分:1)

  

有什么方法可以指定GPS更新间隔   时间和距离可以减少CPU活动时间。

为了了解距离/位置变化,您必须更新QGeoPositionInfo info。这与您减少GPS请求/更新的目标相矛盾。但是,如果您的QGeoPositionInfo info也包含速度和/或加速度,则可以预测下一个位置更改,从而避免其他GPS请求。

  

另外我想知道有没有直接的方式我可以得到设备   位置直接使用QT API而没有任何(QT信号)回调   功能很快。

你必须以某种方式低级别,这意味着&#34;说&#34;直接连接到GPS接收器。

所以我的建议是:如果过于频繁的请求会耗费电池寿命,请根据下一个位置变化的可预测性使请求间隔变化。