QT 快速获取最后一个已知位置

Posted

技术标签:

【中文标题】QT 快速获取最后一个已知位置【英文标题】:QT Get Last known location quickly 【发布时间】:2017-06-02 04:54:59 【问题描述】:

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

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);
      

请告诉我,

    有什么方法可以指定 GPS 更新间隔 时间和距离方面可以减少 CPU 活动时间。 另外我想知道有没有什么直接的方法可以让我获得设备 直接使用 QT API 定位,没有任何(QT 信号)回调 快速发挥作用。

注意:基于 qml 的位置更新可能没有帮助,因为我们想在 C++ 代码中实现功能。

【问题讨论】:

【参考方案1】:

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

为了知道距离/位置变化,您必须更新您的QGeoPositionInfo info。这与您减少 GPS 请求/更新的目标相矛盾。但是,如果您的 QGeoPositionInfo info 还包含速度和/或加速度,您可能会预测下一次位置变化,从而避免额外的 GPS 请求。

我也想知道有什么直接的方法可以让我获得设备 直接使用 QT API 定位,没有任何(QT 信号)回调 快速运行。

为此,您必须以某种方式降低级别,这意味着直接与您的 GPS 接收器“对话”。

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

【讨论】:

以上是关于QT 快速获取最后一个已知位置的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中获取位置管理器的最后一个已知位置?

使用 FusedLocationProviderClient 获取按钮单击的最后一个已知位置

Facebook 图形 API 最后已知位置

我们可以在不使用 android 的 GPS 的情况下获取上一个已知位置或大致位置吗?

获取最后一个位置不会返回位置

检索最后一个已知的地理位置 - Phonegap