• SWIFT中获取当前经伟度


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

    import UIKit
    import 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<String.Index>(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方法进行请求。

  • 相关阅读:
    20190919-4 单元测试,结对
    20190919-3 效能分析
    20190919-2 功能测试
    git 和conding.net 超详细超简单安装
    html元素contenteditable属性如何定位光标和设置光标
    【分享】WeX5的正确打开方式(6)——数据组件初探
    从零开始开发一款H5小游戏(二) 创造游戏世界,启动发条
    分享一个自己写的基于canvas的原生js图片爆炸插件
    基于 HTML5 的 WebGL 技术构建 3D 场景(一)
    从零开始开发一款H5小游戏(三) 攻守阵营,赋予粒子新的生命
  • 原文地址:https://www.cnblogs.com/foxting/p/4518379.html
Copyright © 2020-2023  润新知