SwiftUI获取用户的位置信息(CLLocationManager,CLLocationManagerDelegate)

本篇文章将会介绍一下在SwiftUI中如何通过CorLocation框架获取用户的位置信息,因为获取位置信息属于用户的隐私信息,所以需要在Info.plist文件里面加上访问位置权限的说明。
在这里插入图片描述
关于位置信息,可以请求两种级别的许可:alwayswhen in use。根据我们应用需求进行选择。我们需要在Info.plist文件上上添加这个条目,同时必须提供一个描述,向用户解释为什么你的应用程序需要位置信息(该文本将出现在询问用户权限的对话框中),比如说:“XXX App需要访问您的位置以提供基于位置的服务。”

本文采用when in use这种方式:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/bb719f87fd4e48dd9f578e6e7abdee60.png = 600x)

下面创建一个处理位置信息的类LocationManager

import Foundation
import CoreLocation

final class LocationManager: NSObject, CLLocationManagerDelegate, ObservableObject {
   

  // 记录位置信息
  @Published var currentLocation: CLLocationCoordinate2D?

  // 初始化CLLocationManager实例
  private var locManager = CLLocationManager()

  func checkLocationAuthorization() {
   
    // 设置代理
    locManager.delegate = self

    // 获取用户授权状态
    let authorizationStatus = locManager.authorizationStatus


    DispatchQueue.global().async {
    [weak self] in
      // 判断用户设备的系统位置权限是否开启,而非App的。该判断需要异步进行,否则会卡主线程。
      if CLLocationManager.locationServicesEnabled() {
   
        // 如果设备系统位置权限开启了,回主线程继续操作
        DispatchQueue.main.async {
   
          if authorizationStatus == .authorizedAlways || authorizationStatus == .authorizedWhenInUse {
   
            // 如果用户授权了,开启位置更新。
            self?.locManager.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值