博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SWIFT中获取当前经伟度
阅读量:5940 次
发布时间:2019-06-19

本文共 2630 字,大约阅读时间需要 8 分钟。

很多的APP中都会用到用户的当前位置信息,本文将实现这个小功能

import UIKitimport CoreLocation  //添加引用class ViewController: UIViewController,CLLocationManagerDelegate {    let locationManager:CLLocationManager = CLLocationManager() //实例化一个CLLocationManager对象    override func viewDidLoad() {        super.viewDidLoad()        locationManager.delegate = self        locationManager.desiredAccuracy = kCLLocationAccuracyBest //设置为最高的精度        if(ios8()){            locationManager.requestAlwaysAuthorization()  //如果是IOS8及以上版本需调用这个方法        }                locationManager.startUpdatingLocation()  //start updating location    }        func ios8() -> Bool {        var versionCode:String = UIDevice.currentDevice().systemVersion        let start:String.Index = advance(versionCode.startIndex, 0)        let end:String.Index = advance(versionCode.startIndex, 1)        let range = Range
(start: start, end: end) let version = NSString(string: UIDevice.currentDevice().systemVersion.substringWithRange(range)).doubleValue return version >= 8.0 } //重写这个方法获取位置 func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!){ let location:CLLocation = locations[locations.count - 1] as! CLLocation //得到数组中的最后一个元素 if location.horizontalAccuracy > 0 { let latitude = location.coordinate.latitude //得到经伟度 let longtitude = location.coordinate.longitude locationManager.stopUpdatingLocation() //stop updating location } } //重写当发生错误时要调用的方法 func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!){ println(error) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}

 写要上面的代码还需要在info.plist文件内添加以下几个键值:

请求获得应用一直使用定位服务授权:NSLocationAlwaysUsageDescription:“Please allow me to get you location”

在用户第一交使用APP时也会询问是否允许APP获取当前用户的地理位置信息

请求获得应用使用时的定位服务授权:Location Usage Description:“我们需要使用你的地理位置储备“

iOS 8 还提供了更加人性化的定位服务选项。App 的定位服务不再仅仅是关闭或打开,现在,定位服务的启用提供了三个选项,「永不」「使用应用程序期间」和「始终」。同时,考虑到能耗问题,如果一款 App 要求始终能在后台开启定位服务,iOS 8 不仅会在首次打开 App 时主动向你询问,还会在日常使用中弹窗提醒你该 App 一直在后台使用定位服务,并询问你是否继续允许。在iOS7及以前的版本,如果在应用程序中使用定位服务只要在程序中调用startUpdatingLocation方法应用就会询问用户是否允许此应用是否允许使用定位服务,同时在提示过程中可以通过在info.plist中配置通过配置Privacy - Location Usage Description告诉用户使用的目的,同时这个配置是可选的。

但是在iOS8中配置配置项发生了变化,可以通过配置NSLocationAlwaysUsageDescription或者NSLocationWhenInUseUsageDescription来告诉用户使用定位服务的目的,并且注意这个配置是必须的,如果不进行配置则默认情况下应用无法使用定位服务,打开应用不会给出打开定位服务的提示,除非安装后自己设置此应用的定位服务。同时,在应用程序中需要根据配置对requestAlwaysAuthorization或locationServicesEnabled方法进行请求。

 

转载地址:http://mmqtx.baihongyu.com/

你可能感兴趣的文章
CentOS使用chkconfig增加开机服务提示service xxx does not support chkconfig的问题解决
查看>>
微服务+:服务契约治理
查看>>
save
查看>>
Android DrawLayout + ListView 的使用(一)
查看>>
clear session on close of browser jsp
查看>>
asp.net mvc Post上传文件大小限制 (转载)
查看>>
关于吃掉物理的二次聚合无法实现的需要之旁门左道实现法
查看>>
mysql出现unblock with 'mysqladmin flush-hosts'
查看>>
oracle exp/imp命令详解
查看>>
开发安全的 API 所需要核对的清单
查看>>
Mycat源码中的单例模式
查看>>
WPF Dispatcher介绍
查看>>
fiddler展示serverIP方法
查看>>
C语言中的随意跳转
查看>>
006-spring cloud gateway-GatewayAutoConfiguration核心配置-GatewayProperties初始化加载、Route初始化加载...
查看>>
WPF中如何将ListViewItem双击事件绑定到Command
查看>>
《聚散两依依》
查看>>
小tips:你不知道的 npm init
查看>>
Mac笔记本中是用Idea开发工具在Java项目中调用python脚本遇到的环境变量问题解决...
查看>>
Jmeter也能IP欺骗!
查看>>