PySide6.QtPositioning.QGeoPositionInfoSource¶
- class QGeoPositionInfoSource¶
QGeoPositionInfoSource
类是一个用于分发位置更新的抽象基类。更多…概要¶
属性¶
minimumUpdateIntervalᅟ
- 此属性保存获取位置更新所需的最短时间(以毫秒为单位)preferredPositioningMethodsᅟ
- 设置此源的首选定位方法sourceNameᅟ
- 此属性保存正在使用的位置源实现的唯一名称updateIntervalᅟ
- 此属性保存每次更新之间请求的间隔时间(以毫秒为单位)
方法¶
def
__init__()
def
sourceName()
def
updateInterval()
虚拟方法¶
def
error()
def
requestUpdate()
def
startUpdates()
def
stopUpdates()
信号¶
静态函数¶
def
createSource()
注意
本文档可能包含从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:
创建一个具有指定
parent
的位置源。- static availableSources()¶
- Return type:
字符串列表
返回可用源插件的列表。这包括当前平台的任何默认后端插件。
- backendProperty(name)¶
- Parameters:
name – str
- Return type:
对象
返回名为
name
的后端特定属性的值(如果存在)。否则,返回的值将无效。支持的后端特定属性在Qt Positioning plugins#Default plugins中列出并描述。另请参阅
创建并返回一个具有给定
parent
的位置源,该位置源从系统的默认位置数据源或具有最高可用优先级的插件读取数据。如果系统没有默认的位置源、找不到有效的插件或用户没有权限访问当前位置,则返回
nullptr
。- static createDefaultSource(parameters, parent)
- Parameters:
parameters – 字典,键类型为 .QString,值类型为 QVariant。
parent –
QObject
- Return type:
创建并返回一个具有给定
parent
的位置源,该位置源从系统的默认位置数据源或具有最高可用优先级的插件读取数据。如果系统没有默认的位置源、找不到有效的插件或用户没有权限访问当前位置,则返回
nullptr
。此方法将
parameters
传递给工厂以配置源。通过加载名为
sourceName
的插件,创建并返回一个具有给定parent
的位置源。如果找不到插件,则返回
nullptr
。- static createSource(sourceName, parameters, parent)
- Parameters:
sourceName – str
parameters – 字典,键类型为 .QString,值类型为 QVariant。
parent –
QObject
- Return type:
通过加载名为
sourceName
的插件,创建并返回一个具有给定parent
的位置源。如果找不到插件,则返回
nullptr
。此方法将
parameters
传递给工厂以配置源。返回上次发生的错误类型。
注意
自Qt6以来,调用
startUpdates()
或requestUpdate()
时,最后一个错误总是被重置。此信号在发生错误后发出。
positioningError
参数描述了发生的错误类型。- abstract lastKnownPosition([fromSatellitePositioningMethodsOnly=false])¶
- Parameters:
fromSatellitePositioningMethodsOnly – bool
- Return type:
返回包含最后已知位置的更新,如果没有可用的更新,则返回空更新。
如果
fromSatellitePositioningMethodsOnly
为 true,则返回从卫星定位方法接收到的最后一个已知位置;如果没有可用的位置,则返回 null 更新。- abstract minimumUpdateInterval()¶
- Return type:
整数
属性
minimumUpdateIntervalᅟ
的获取器。- positionUpdated(update)¶
- Parameters:
更新 –
QGeoPositionInfo
如果调用了
startUpdates()
或requestUpdate()
,当有更新可用时,会发出此信号。update
值保存了新更新的值。- preferredPositioningMethods()¶
- Return type:
属性
preferredPositioningMethodsᅟ
的获取器。- abstract requestUpdate([timeout=0])¶
- Parameters:
timeout – int
尝试获取当前位置并使用此信息发出
positionUpdated()
。如果在给定的timeout
(以毫秒为单位)内无法找到当前位置,或者如果timeout
小于minimumUpdateInterval()
返回的值,则会发出带有UpdateTimeoutError
的errorOccurred()
信号。如果超时时间为零,则超时时间默认为适合源的合理超时期限。
如果另一个更新请求正在进行中,则此操作无效。然而,即使
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中列出并描述。另请参阅
- setPreferredPositioningMethods(methods)¶
- Parameters:
方法 –
PositioningMethod
的组合
属性
preferredPositioningMethodsᅟ
的设置器。- setUpdateInterval(msec)¶
- Parameters:
毫秒 – 整数
另请参阅
属性
updateIntervalᅟ
的设置器。- sourceName()¶
- Return type:
字符串
属性
sourceNameᅟ
的获取器。- abstract startUpdates()¶
按照
setUpdateInterval()
指定的时间间隔开始定期发出更新。如果尚未调用
setUpdateInterval()
,源将在更新可用时立即发出更新。如果此
QGeoPositionInfoSource
子类确定无法提供定期更新,则会发出带有UpdateTimeoutError
的errorOccurred()
信号。如果卫星定位丢失或检测到硬件错误,可能会发生这种情况。如果数据稍后可用,位置更新将重新开始。在定期更新恢复之前,不会再次发出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:
返回此源可用的定位方法。可用性定义为在调用此函数时可用。因此,用户设置如关闭位置服务或对基于卫星的位置提供者的限制都会通过此函数反映出来。状态更改时的运行时通知可以通过
supportedPositioningMethodsChanged()
获取。并非所有平台都能区分不同的定位方法或传达设备的当前用户配置。下表提供了当前平台情况的概述:
平台
简要描述
Android
当定位服务处于活动状态时,已知并传达各个提供者的状态和一般定位服务状态。
GeoClue
硬编码为始终返回
AllPositioningMethods
。GeoClue2
个别提供者无法区分,但禁用的位置服务已反映。
iOS
硬编码为始终返回
AllPositioningMethods
。macOS
硬编码为始终返回
AllPositioningMethods
。Windows (UWP)
无法区分各个提供者,但禁用的位置服务已反映。
- supportedPositioningMethodsChanged()¶
当支持的定位方法发生变化时,会发出此信号。变化的原因可能是用户打开/关闭定位服务或将定位服务限制为某些类型(例如仅限GPS)。请注意,并非所有平台都能检测到支持的定位方法的变化。
supportedPositioningMethods()
提供了当前平台支持的概述。- updateInterval()¶
- Return type:
整数
另请参阅
属性
updateIntervalᅟ
的获取器。