亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于CoreLocation的那些事

標簽:
iOS

最近在看CoreLocation和MapKit的东西, 随便写一些学习笔记, 可能到后面再回过头来看这些东西会显得有些蠢, 到时候再改吧, 哈哈

CLLocationManager


  • CLLocationManager发送位置请求的前提是一定要请求获取定位权限

- (void)requestAlwaysAuthorization     // 总是给予授权- (void)requestWhenInUseAuthorization; // 在前台才定位
  • 在发送位置请求时为了严谨起见最好对定位功能做一个判断

+ (BOOL)locationServicesEnabled;
  • 在iOS9中位置请求方式发生了一些变化

只在前台访问位置时:

- (void)requestWhenInUseAuthorization// 并为.plist配置NSLocationWhenInUseUsageDescription

想要在后台访问位置有两种方法:

一种方法是处在拥有前台定位权限的情况下:

设置CLLocationManager的allowsBackgroundLocationUpdatesYES

然后打开Xcode -> Targets -> Capabilities 中的Background Modes并勾选其中的Location updates选项

以上步骤也可以通过以下配置.plist文件的方式实现 :

<!--开启Background Modes中的Location updates--><key>UIBackgroundModes</key><array>
    <string>location</string></array>

切记如果不开启Background Modes的Location updates选项将会导致以下错误的出现:

Assertion failure in -[CLLocationManager setAllowsBackgroundLocationUpdates:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/CoreLocationFramework_Sim/CoreLocation-1861.0.9/Framework/CoreLocation/CLLocationManager.m:604*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: !stayUp || CLClientIsBackgroundable(internal->fClient)'

当然这种获取后台位置访问权限的方式有一个"弊端", 那就是会有一个导航条大小的蓝色提示窗口出现在手机屏幕顶端, 这个提示会挤占手机屏幕空间, 很神奇~https://img1.sycdn.imooc.com//5d5e80bd000186ac04960125.png我猜你一定喜欢另一种进行后台位置访问的方法, 那就是直接请求后台定位权限:

- (void)requestAlwaysAuthorization// 并为.plist配置NSLocationAlwaysUsageDescription

CLLocation


关于这个类想说的东西只有一个, 那就是它的horizontalAccuracyverticalAccuracy属性, 从字面上看好像是水平精度和垂直精度的意思

先看下官方文档怎么说:

The radius of uncertainty for the location, measured in meters. (read-only)

The location’s latitude and longitude identify the center of the circle, and this value indicates the radius of that circle. A negative value indicates that the location’s latitude and longitude are invalid.

In iOS, this property is declared as nonatomic. In OS X, it is declared as atomic.

我的理解是, 从地理空间的角度看, Apple称通过经纬度确定的位置为水平位置, 而通过海拔确定的位置是垂直位置, horizontalAccuracy则是通过该位置的经度和纬度确定的圆的半径. 该值越大表示精度越低, 也就是位置越不准确, 而负值则表示该位置是无效的, verticalAccuracy和海拔的关系也是如此, 官方文档说的应该很清楚了

在实际开发过程常常会对horizontalAccuracy的值进行判断以确定当前位置是否有效

(待更)



作者:Hackice_Wang
链接:https://www.jianshu.com/p/87bb0b8df1e7


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消