作者:IOSCREATOR,原文链接,原文日期:2016-10-13

译者:冬瓜;校对: Cwift;定稿:CMB

在 iOS 中用户的位置信息被视为个人隐私,所以在获取时需要向用户请求权限。本篇教程将讲述向用户请求该权限的步骤。开发环境为 Xcode 8 Beta,运行环境为 iOS 10。

打开 Xcode 然后创建一个新的单视图应用(Single View Application)。

如图所示,点击 Next。将工程名命名为 IOS10RequestingPermissionTutorial,自行填写 Organization Name 和 Organization Identifier。选择 Swift 作为编程语言,适配设备选择 iPhone。

编辑 Storyboard。将一个按钮控件拖入主视图。双击按钮视图编辑文字改为 “Get Location”。如下图所示:

打开 Assistant Editor 并确保 ViewController.swift 文件可见。按住 Ctrl 键从按键控件拖拽到 ViewController 这个类中来创建一个 Action。

转到 ViewController.swift 文件并添加以下代码导入 Conre Location 框架。 import CoreLocation复制代码

让 ViewController 遵循 CLLocationManagerDelegate 协议。并修改该类的定义: class ViewController: UIViewController, CLLocationManagerDelegate {}复制代码

增加以下属性: let locationMgr = CLLocationManager()复制代码

CLLocationManager 是原生的 GPS 坐标管理对象。接下来按照以下代码来实现 getMyLocation 方法: @IBAction func getLocation() {

// 1

let status = CLLocationManager.authorizationStatus()

// 2

if status == .notDetermined {

locationMgr.requestWhenInUseAuthorization()

return

}

// 3

if status == .denied || status == .restricted {

let alert = UIAlertController(title: "Location Services Disabled", message: "Please enable Location Services in Settings", preferredStyle: .alert)

let okAction = UIAlertAction(title: "OK", style: .default, handler: nil)

alert.addAction(okAction)

present(alert, animated: true, completion: nil)

return

}

// 4

locationMgr.delegate = self

locationMgr.startUpdatingLocation()

}复制代码

authorizationStatus 对象将返回授权状态。

保证 app 在前台运行时,当定位更新后获取定位。

当定位服务被禁用时,用户将收到提示。

确定代理对象为当前的 ViewController

然后实现 CLLocationManager 的代理方法。 // 1

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

let currentLocation = locations.last!

print("Current location: \(currentLocation)")

}

// 2

func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {

print("Error \(error)")

}复制代码

当前位置坐标输出到控制台。

当定位无法更新时输出错误原因。

要在 app 运行时请求 GPS 定位权限,需要在 info.plist 中设置新的属性键(Key)。单击鼠标右键选择添加行,并输入以下值:

在 Build 并运行工程时,app 会主动寻求定位授权:

点开控制台中的位置箭头,选择一个预定义的位置。控制台会打印当前的 GPS 定位。 Current location: +/- 5.00m (speed -1.00 mps / course -1.00) @ 9/12/16, 3:25:27 PM Central European Summer Time

Current location: +/- 5.00m (speed -1.00 mps / course -1.00) @ 9/12/16, 3:25:28 PM Central European Summer Time

Current location: +/- 5.00m (speed -1.00 mps / course -1.00) @ 9/12/16, 3:25:29 PM Central European Summer Time

Current location: +/- 5.00m (speed -1.00 mps / course -1.00) @ 9/12/16, 3:25:30 PM Central European Summer Time

Current location: +/- 5.00m (speed -1.00 mps / course -1.00) @ 9/12/16, 3:25:31 PM Central European Summer Time

Current location: +/- 5.00m (speed -1.00 mps / course -1.00) @ 9/12/16, 3:25:32 PM Central European Summer Time复制代码

你可以在 Github 上的 ioscreator 仓库中下载 IOS10RequestingPermissionTutorial 的源码。

本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 swift.gg。

ios定位权限plist_[译] iOS 请求定位权限相关推荐

  1. ios 图像坐标系_[译] iOS 开源图形库 Core Plot 使用教程

    注意 :本篇教程已被 Attila Hegedüs 更新,可适用于 iOS 9 和 Swift 2.2.原始教程出自教程组成员 Steve Baranski. 如果你曾经想在自己的 app 中引入图表 ...

  2. [Android Studio]详细讲解Android6.0以上请求应用权限(解决请求权限窗口一闪而过的问题)

    现在的主流手机的Android版本都是8.0/9.0(笔者的华为手机为9.0),所以在开发Android的时候尽量使用Android8.0的版本(SDK 26).随着Android版本的提升,系统的安 ...

  3. Android运行时权限,设置帮助类BaseActivity;电话权限,短信权限,

                                      Android运行时权限设置帮助类BaseActivity  一.电话权限 package com.glandroid.smssen ...

  4. iOS开发请求定位权限总结

    1. iOS7以前 系统配置之后出现:永不.始终 选项 2. iOS8-10 系统配置之后出现:永不.始终 选项  通过配置 NSLocationWhenInUseUsageDescription 可 ...

  5. ios 位置服务器,关于 iOS 和 iPadOS 中的隐私与定位服务

    隐私设置 借助 iOS 和 iPadOS 中的隐私设置,您可以控制哪些 App 可以访问储存在您设备上的信息.例如,您可以允许社交网络 App 使用您的摄像头,以便拍摄照片并上传到该 App.您还可以 ...

  6. 高德sdk定位当前位置_单次定位-获取位置-开发指南-iOS 定位SDK | 高德地图API

    iOS定位SDK提供的单次定位方法基于苹果定位核心,苹果定位核心会在设备移动时连续返回定位结果,高德在此基础上封装了单次定位.当设备可以正常联网时,还可以返回该定位点的对应的中国境内位置信息(包括:省 ...

  7. ios wifi 定位_一种IOS设备的集中式Wifi室内定位方法

    一种IOS设备的集中式Wifi室内定位方法 [技术领域] [0001] 本发明属于无线通信室内定位技术领域,具体涉及一种IOS设备的集中式Wifi室 内定位方法. [背景技术] [0002] 近年来, ...

  8. ios 高德获取定位_更新日志-iOS 定位SDK | 高德地图API

    高德地图iOS 定位 SDK V2.6.7            2020-08-28 1.适配iOS14定位权限:新增"模糊定位"权限下的兼容策略: 2.修复bug,提升性能和稳 ...

  9. iOS定位从 “始终”定位,改变成“使用期间”定位

    iOS APP中定位服务选项中常用有三种授权状态:1.永不  2.使用应用期间  3.始终 如何让APP同时拥有三种选择? 需要进行以下设置: 在应用的info.plist文件中添加有关定位授权的属性 ...

  10. 研究表明:安卓和iOS应用无节操滥用邮箱和定位数据

    某最新研究表明,73%的安卓应用会向第三方共享用户的邮箱地址,而47%的iOS用户会给第三方提供用户定位数据. 没有免费的午餐 英国广播公司BBC表示,这个研究成果来自于麻省理工学院.哈佛大学,以及卡 ...

最新文章

  1. win10+Linux双系统安装及一些配置问题
  2. 用友Cell组件使用总结
  3. 一起来开发Android的天气软件(一)——功能规格介绍
  4. 3号团队-团队任务4:每日例会(2018-12-3)
  5. wifi分析仪怎么看哪个信道好_游戏工作室用什么路由器好?合理选择组建手机工作室网络...
  6. Hadoop下载和源码阅读
  7. 【CodeForces - 722D】Generating Sets(二分,贪心)
  8. 深度学习【目标检测】
  9. Edge好用么?几条你不知道的Edge小技巧
  10. Chrome安装Vue.js devtool 4.1.4_0
  11. kafka实战教程(python操作kafka),kafka配置文件详解
  12. Windows Mysql报错:Access denied for user ‘root‘ @ localhost useing password no 或者 yes 解决
  13. 更改配置本地host地址
  14. linux c libxml2的使用
  15. 计算机五笔是什么时候学的吗,电脑五笔输入法怎么学
  16. 高数 | 【一元函数微分学】导数部分经典快速例题
  17. 【百度地图2.5D、3D在Vue项目中的使用】嵌入二维百度地图、三维百度地图、多种显示模式风格样式颜色的百度地图
  18. 表贴电阻尺寸与什么有关_电阻尺寸对照表
  19. 搭建自己的NAS 系统
  20. 微商软文标题怎么写才吸引人?

热门文章

  1. java工作流activity_activity 工作流学习(一)
  2. AndroidStudio常用字体
  3. 解决android SDK不能更新,appium测试混合app无法返回webview问题
  4. MetaTrader5平台 Python
  5. JavaScript 弹出窗口代码大全
  6. VS2010 由于应用程序配置不正确,程序未能启动”--原因及解决方法
  7. 02 文本检测(一)-CTPN
  8. B站左程云算法视频高级班04
  9. 炜煌T3POS58微打参数设置方法
  10. DRF如何使用serializer进行验证数据