PySide6.QtPositioning.QGeoPositionInfoSource

class QGeoPositionInfoSource

QGeoPositionInfoSource 类是一个用于分发位置更新的抽象基类。更多

PySide6.QtPositioning.QGeoPositionInfoSource 的继承图

继承者: QNmeaPositionInfoSource

概要

属性

方法

虚拟方法

信号

静态函数

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

静态函数 createDefaultSource() 创建一个适用于平台的默认位置源,如果有的话。否则,QGeoPositionInfoSource 将检查是否有实现 QGeoPositionInfoSourceFactory 接口的可用插件。

QGeoPositionInfoSource 子类的用户可以使用 requestUpdate() 请求当前位置,或者使用 startUpdates()stopUpdates() 开始和停止定期位置更新。当有更新时,会发出 positionUpdated() 信号。可以使用 lastKnownPosition() 访问最后已知的位置。

如果需要定期更新位置,可以使用setUpdateInterval()来指定这些更新的频率。如果没有指定间隔,更新将在可用时提供。例如:

// Emit updates every 10 seconds if available
QGeoPositionInfoSource *source = QGeoPositionInfoSource::createDefaultSource(0);
if (source)
    source->setUpdateInterval(10000);

要移除之前设置的更新间隔,请调用setUpdateInterval()并将值设为0。

注意

位置源可能对更新间隔有最小值要求,如minimumUpdateInterval()所返回的。

注意

要从Android服务中使用此类,请参阅Qt Positioning on Android

class Error

Error 枚举表示可能发生的错误。

常量

描述

QGeoPositionInfoSource.AccessError

由于应用程序缺少所需的权限,与远程定位后端的连接设置失败。

QGeoPositionInfoSource.ClosedError

远程定位后端关闭了连接,例如当用户将定位服务关闭时会发生这种情况。一旦定位服务重新启用,常规更新将恢复。

QGeoPositionInfoSource.NoError

没有发生错误。

QGeoPositionInfoSource.UnknownSourceError

发生了一个未识别的错误。

QGeoPositionInfoSource.UpdateTimeoutError

如果调用了requestUpdate(),此错误表示无法在指定的超时时间内检索到当前位置。如果调用了startUpdates(),此错误表示此QGeoPositionInfoSource子类确定无法提供进一步的定期更新。在后一种情况下,直到定期更新恢复后,此错误才会再次发出。

class PositioningMethod

(继承自 enum.Flag) 定义定位方法的类型。

常量

描述

QGeoPositionInfoSource.NoPositioningMethods

没有定位方法。

QGeoPositionInfoSource.SatellitePositioningMethods

基于卫星的定位方法,如GPS或GLONASS。

QGeoPositionInfoSource.NonSatellitePositioningMethods

其他定位方法,如3GPP小区标识符或基于WiFi的定位。

QGeoPositionInfoSource.AllPositioningMethods

一旦可用,使用基于卫星的定位方法。否则使用非基于卫星的方法。

注意

当使用from __feature__ import true_property时,属性可以直接使用,否则通过访问器函数使用。

property minimumUpdateIntervalᅟ: int

此属性表示获取位置更新所需的最短时间(以毫秒为单位)。

这是setUpdateInterval()requestUpdate()接受的最小值。

Access functions:
property preferredPositioningMethodsᅟ: Combination of QGeoPositionInfoSource.PositioningMethod

此属性用于设置此源的优选定位方法。

如果新方法包含源不支持的方法,则不支持的方法将被忽略。

如果新方法不包括源可用的单一方法,首选方法将设置为源可用的方法集。如果源没有可用的方法(例如,因为其位置服务已关闭或不提供位置服务),则传递的方法将按原样接受。

此属性的默认值为 NoPositioningMethods

注意

子类实现必须调用setPreferredPositioningMethods()的基本实现,以确保preferredPositioningMethods()返回正确的值。

Access functions:
property sourceNameᅟ: str

此属性保存此属性保存正在使用的位置源实现的唯一名称。

这是可以传递给createSource()的相同名称,以便创建特定位置源实现的新实例。

Access functions:
property updateIntervalᅟ: int

此属性保存每次更新之间请求的间隔时间(以毫秒为单位)。

如果未设置更新间隔(或设置为0),源将根据需要尽可能频繁地提供更新。

如果设置了更新间隔,源将尽可能接近请求的间隔提供更新。如果请求的间隔小于minimumUpdateInterval(),则使用最小间隔。

更新间隔的更改将尽快生效,但更改所需的时间可能因实现而异。从前一个间隔经过的时间是否计入新间隔也取决于实现。

此属性的默认值为0。

注意

子类实现必须调用setUpdateInterval()的基本实现,以便updateInterval()返回正确的值。

注意

此属性不能用于调整iOS和macOS上的更新频率,因为它们的API不提供这种可能性。在这些系统上,此参数仅用于设置UpdateTimeoutError,并在未在所需间隔内收到更新时触发errorOccurred信号。

Access functions:
__init__(parent)
Parameters:

父对象QObject

创建一个具有指定parent的位置源。

static availableSources()
Return type:

字符串列表

返回可用源插件的列表。这包括当前平台的任何默认后端插件。

backendProperty(name)
Parameters:

name – str

Return type:

对象

返回名为name的后端特定属性的值(如果存在)。否则,返回的值将无效。支持的后端特定属性在Qt Positioning plugins#Default plugins中列出并描述。

另请参阅

setBackendProperty

static createDefaultSource(parent)
Parameters:

父对象QObject

Return type:

QGeoPositionInfoSource

创建并返回一个具有给定parent的位置源,该位置源从系统的默认位置数据源或具有最高可用优先级的插件读取数据。

如果系统没有默认的位置源、找不到有效的插件或用户没有权限访问当前位置,则返回 nullptr

static createDefaultSource(parameters, parent)
Parameters:
  • parameters – 字典,键类型为 .QString,值类型为 QVariant。

  • parentQObject

Return type:

QGeoPositionInfoSource

创建并返回一个具有给定parent的位置源,该位置源从系统的默认位置数据源或具有最高可用优先级的插件读取数据。

如果系统没有默认的位置源、找不到有效的插件或用户没有权限访问当前位置,则返回 nullptr

此方法将parameters传递给工厂以配置源。

static createSource(sourceName, parent)
Parameters:
  • sourceName – str

  • parentQObject

Return type:

QGeoPositionInfoSource

通过加载名为 sourceName 的插件,创建并返回一个具有给定 parent 的位置源。

如果找不到插件,则返回 nullptr

static createSource(sourceName, parameters, parent)
Parameters:
  • sourceName – str

  • parameters – 字典,键类型为 .QString,值类型为 QVariant。

  • parentQObject

Return type:

QGeoPositionInfoSource

通过加载名为 sourceName 的插件,创建并返回一个具有给定 parent 的位置源。

如果找不到插件,则返回 nullptr

此方法将parameters传递给工厂以配置源。

abstract error()
Return type:

错误

返回上次发生的错误类型。

注意

自Qt6以来,调用startUpdates()requestUpdate()时,最后一个错误总是被重置。

errorOccurred(positioningError)
Parameters:

positioningErrorError

此信号在发生错误后发出。positioningError 参数描述了发生的错误类型。

abstract lastKnownPosition([fromSatellitePositioningMethodsOnly=false])
Parameters:

fromSatellitePositioningMethodsOnly – bool

Return type:

QGeoPositionInfo

返回包含最后已知位置的更新,如果没有可用的更新,则返回空更新。

如果 fromSatellitePositioningMethodsOnly 为 true,则返回从卫星定位方法接收到的最后一个已知位置;如果没有可用的位置,则返回 null 更新。

abstract minimumUpdateInterval()
Return type:

整数

属性 minimumUpdateIntervalᅟ 的获取器。

positionUpdated(update)
Parameters:

更新QGeoPositionInfo

如果调用了startUpdates()requestUpdate(),当有更新可用时,会发出此信号。

update 值保存了新更新的值。

preferredPositioningMethods()
Return type:

PositioningMethod的组合

属性 preferredPositioningMethodsᅟ 的获取器。

abstract requestUpdate([timeout=0])
Parameters:

timeout – int

尝试获取当前位置并使用此信息发出positionUpdated()。如果在给定的timeout(以毫秒为单位)内无法找到当前位置,或者如果timeout小于minimumUpdateInterval()返回的值,则会发出带有UpdateTimeoutErrorerrorOccurred()信号。

如果超时时间为零,则超时时间默认为适合源的合理超时期限。

如果另一个更新请求正在进行中,则此操作无效。然而,即使startUpdates()已经被调用并且常规更新正在进行中,也可以调用它。

如果源使用多种定位方法,它会在给定的超时时间内尝试从最准确的定位方法获取当前位置。

注意

自Qt6以来,此方法在请求位置之前总是将最后一个错误重置为NoError

注意

要了解如何从Android服务中使用此方法,请参阅Qt Positioning on Android

setBackendProperty(name, value)
Parameters:
  • name – str

  • value – 对象

Return type:

布尔

将名为name的后端特定属性设置为value。成功时返回true,否则返回false。后端特定属性可用于在运行时配置定位子系统行为。支持的后端特定属性在Qt Positioning plugins#Default plugins中列出并描述。

另请参阅

backendProperty

setPreferredPositioningMethods(methods)
Parameters:

方法PositioningMethod 的组合

属性 preferredPositioningMethodsᅟ 的设置器。

setUpdateInterval(msec)
Parameters:

毫秒 – 整数

另请参阅

updateInterval()

属性 updateIntervalᅟ 的设置器。

sourceName()
Return type:

字符串

属性 sourceNameᅟ 的获取器。

abstract startUpdates()

按照setUpdateInterval()指定的时间间隔开始定期发出更新。

如果尚未调用setUpdateInterval(),源将在更新可用时立即发出更新。

如果此QGeoPositionInfoSource子类确定无法提供定期更新,则会发出带有UpdateTimeoutErrorerrorOccurred()信号。如果卫星定位丢失或检测到硬件错误,可能会发生这种情况。如果数据稍后可用,位置更新将重新开始。在定期更新恢复之前,不会再次发出UpdateTimeoutError错误。

注意

自Qt6以来,此方法在开始更新之前总是将最后一个错误重置为NoError

注意

要了解如何从Android服务中使用此方法,请参阅Qt Positioning on Android

在iOS上,从版本8开始,Core Location框架要求在应用程序的Info.plist中添加额外的条目,键为NSLocationAlwaysUsageDescription或NSLocationWhenInUseUsageDescription,并提供一个字符串以在授权提示中显示。当应用程序在前台运行时请求使用位置服务的权限时,使用键NSLocationWhenInUseUsageDescription。当应用程序在运行时(无论是前台还是后台)请求使用位置服务的权限时,使用键NSLocationAlwaysUsageDescription。如果两个条目都定义了,NSLocationWhenInUseUsageDescription在前台模式下具有优先级。

abstract stopUpdates()

停止定期发出更新。

abstract supportedPositioningMethods()
Return type:

PositioningMethod的组合

返回此源可用的定位方法。可用性定义为在调用此函数时可用。因此,用户设置如关闭位置服务或对基于卫星的位置提供者的限制都会通过此函数反映出来。状态更改时的运行时通知可以通过supportedPositioningMethodsChanged()获取。

并非所有平台都能区分不同的定位方法或传达设备的当前用户配置。下表提供了当前平台情况的概述:

平台

简要描述

Android

当定位服务处于活动状态时,已知并传达各个提供者的状态和一般定位服务状态。

GeoClue

硬编码为始终返回 AllPositioningMethods

GeoClue2

个别提供者无法区分,但禁用的位置服务已反映。

iOS

硬编码为始终返回 AllPositioningMethods

macOS

硬编码为始终返回 AllPositioningMethods

Windows (UWP)

无法区分各个提供者,但禁用的位置服务已反映。

supportedPositioningMethodsChanged()

当支持的定位方法发生变化时,会发出此信号。变化的原因可能是用户打开/关闭定位服务或将定位服务限制为某些类型(例如仅限GPS)。请注意,并非所有平台都能检测到支持的定位方法的变化。supportedPositioningMethods() 提供了当前平台支持的概述。

updateInterval()
Return type:

整数

另请参阅

setUpdateInterval()

属性 updateIntervalᅟ 的获取器。