01. TencentLocationRequest


无论是请求连续定位还是单次定位都需要创建 TencentLocaitonRequest 实例,并传给相关 API 来请求定位,每种定位都只有一部分属性可用:

1.1 连续定位的 Request

// 公共
private coordinateType: TencentLocationConstant.CoordinateType  // 坐标类型
private requestLevel: TencentLocationConstant.RequestLevel      // 请求级别

// 连续定位
private enableBackgroundLocation: boolean  // 是否开启后台定位
private userActivityScenario?: TencentLocationConstant.UserActivityScenario
private powerConsumptionScenario?: TencentLocationConstant.PowerConsumptionScenario
private interval: number       // 腾讯连续定位回调间隔, 由开发者监听, 单位: 秒
private innerInterval: number  // 系统连续定位回调间隔, 由 sdk 监听, 单位: 秒

1.2 单次定位的 Request

// 公共
private coordinateType: TencentLocationConstant.CoordinateType  // 坐标类型
private requestLevel: TencentLocationConstant.RequestLevel      // 请求级别

// 单次定位
private locatingPriority: TencentLocationConstant.LocatingPriority
private singleLocationTimeout: number  // 单次定位超时时间, 单位: 秒

1.3 默认的 TencentLocationRequest 和修改默认值

TencentLocationRequest 实例只能通过类方法 default 来获取,下面是所有的属性和默认值:

// 公共
private coordinateType: TencentLocationConstant.CoordinateType  // 坐标类型:GCJ02
private requestLevel: TencentLocationConstant.RequestLevel      // 请求级别:ADMIN_AREA

// 连续定位
private enableBackgroundLocation: boolean  // 是否开启后台定位
private userActivityScenario?: TencentLocationConstant.UserActivityScenario  // undefined
private powerConsumptionScenario?: TencentLocationConstant.PowerConsumptionScenario  // HIGH_POWER_CONSUMPTION
private interval: number       // 腾讯连续定位回调间隔, 由开发者监听, 单位: 秒,默认:1
private innerInterval: number  // 系统连续定位回调间隔, 由 sdk 监听, 单位: 秒,默认:1

// 单次定位
private locatingPriority: TencentLocationConstant.LocatingPriority  // PRIORITY_LOCATING_SPEED
private singleLocationTimeout: number  // 单次定位超时时间, 单位: 秒,默认:5

修改默认值只需要使用链式调用对应的 setter 方法即可:

const request = TencentLocationRequest
  .default()
  .setCoordinateType(TencentLocationConstant.CoordinateType.WGS84)
  .setRequestLevel(TencentLocationConstant.RequestLevel.POI)

下面是 TencentLocationRequest 配置的详细说明

  • coordinateType:支持 2 种坐标系:GCJ02 和 WGS84。
  • requestLevel:支持 4 种级别:GEO,NAME,ADMIN_AREA,POI。详见第 3 小节。
  • enableBackgroundLocation: 是否开启后台定位。
  • userActivityScenario:详见华为官方文档
  • powerConsumptionScenario:详见华为官方文档
  • interval:SDK 回调位置给开发者的间隔。
  • innerInterval:系统回调位置给 SDK 的间隔,可用来降低使用系统位置的频率,以降低隐私风险。
  • locatingPriority:详见华为官方文档
  • singleLocationTimeout:单次定位的超时时间。

02. TencentLocationManager


有了 TencentLocationRequest,传给 TencentLocationManager 的方法就可以使用 SDK 的各种功能了。SDK 支持多实例,通过 SDK 提供的 getInstance 方法获取。

struct HomePage {
  locationManager_01?: TencentLocationManager = TencentLocationManager.getInstance()
  locationManager_02?: TencentLocationManager = TencentLocationManager.getInstance()  // 不同的实例
  onPageShow(): void {
    // other code 
  }
}

所有接口

// 连续定位
startContinuousLocation(request: TencentLocationRequest, success: Callback<TencentLocation>, failure: ErrorCallback<TencentLocationError>): void
stopContinuousLocation(): void

// 获取设备状态
startReceivingDeviceStatus(callback: Callback<TencentLocationConstant.DeviceStatus>): void
stopReceivingDeviceStatus(): void

// 单次定位
startSingleLocation(request: TencentLocationRequest, success: Callback<TencentLocation>, failure: ErrorCallback<TencentLocationError>): void

// 最后定位
getLastLocation(): TencentLocation | undefined

// 后台定位
startBackgroundLocationTask(wantAgentInfo?: wantAgent.WantAgentInfo): void
stopBackgroundLocationTask(): void

// 地理围栏
addGeofence(geofenceRequest: TencentGeofenceRequest): Promise<number>;
removeGeofence(geofenceID?: number): Promise<void>;

03. TencentLocation


连续定位和单次定位的结果被封装为 TencentLocation,下面是其所有属性。

interface TencentLocation {
  latitude?: number           // 纬度
  longitude?: number          // 经度

  altitude?: number           // 海拔
  accuracy?: number           // 精度
  direction?: number          // 方向
  speed?: number              // 速度

  source?: TencentLocationConstant.LocationSource  // 定位结果来源

  geoAddress?: TencentGeoAddress
  poiList?: Array<TencentPOI>

  timeStamp?: number          // 时间戳, 单位: 毫秒
}

interface TencentGeoAddress {
  name?: string      // 名称
  address?: string   // 地址

  nation?: string    // 国家
  province?: string  // 省
  city?: string      // 市
  district?: string  // 区
  town?: string      // 镇
  village?: string   // 乡
  street?: string    // 街道
  streetNo?: string  // 街道号
}

interface TencentPOI {
  latitude?: number   // 纬度
  longitude?: number  // 经度

  uid?: string        // 此 POI 的 uid
  name?: string       // 名称
  address?: string    // 地址
  catalog?: string    // 此 POI 的类别
  distance?: number   // 此 POI 距离当前位置的距离, 单位: 米
}

TencentLocationRequest 中设置不同 RequestLevel,获取的 TencentLocation 有所不同。

enum RequestLevel {
  GEO         = 0,  // 精度, 纬度, 海拔, 精度
  NAME        = 1,  // 精度, 纬度, 海拔, 精度, 名称, 地址
  ADMIN_AREA   = 3,  // 精度, 纬度, 海拔, 精度, 名称, 地址, 国家, 省, 市, 区, 镇, 村, 街道, 门号
  POI         = 4   // 精度, 纬度, 海拔, 精度,          , 国家, 省, 市, 区, 镇, 村, 街道, 门号, POI 列表
}

这篇文章对您解决问题是否有帮助?

已解决
未解决