zoukankan      html  css  js  c++  java
  • ios项目开发— iOS8 定位功能API改变

    iOS8 定位新增功能

      一、  Core Location framework的变化主要有以下几点:
             1. 在定位状态中引入Always 和WhenInUse的概念。
             2. 加入Visit monitoring的特性, 这类特性特别适合旅行类别的应用,当用户到达某个指定的区域内,monitor开始作用。
             3.加入室内定位技术,增加CLFloor, 在室内可以得到楼层信息。

    下面针对这三种分别详细的讲一下使用方法。

    二、.定位的种类分为:

    持续的更新:location, background location, ranging (Always/WhenInUse work)
    监视类的更新:region monitoring, significant location changes (Always work)
    其中持续的后台位置更新,在程序前台的时候发起的,WhenInUse模式也可以得到正确的地理位置更新,但是如果是类似于从后台被唤起这种服务,则需要使用Always authorization

    c. 增加了跳转到privacy的link: UIApplicationOpenSettingsURLString当需要提示关闭了定位功能的用户使用定位的时候可以给通过如下的方式跳转到设定画面:

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString: UIApplicationOpenSettingsURLString]];

    e. kCLAuthorizationStatus,由原来的kCLAuthorizationStatusAuthorized,变为kCLAuthorizationStatusAuthorizedAlways和kCLAuthorizationStatusAuthorizedWhenInUse

    具体的使用方法:

    A. 决定是否开启后台模式:在Target->capsbilities->backgourn modes
    B. 在plist中增加WhenInUse/Always的提示文字,使用NSLocationWhenInUseUsageDescription /NSLocationAlwaysUseUsageDescription
    C. 请求不同的服务:
    地理位置变化:
    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self;
    [self.locationManager requestWhenInUseAuthorization];
    [self.locationManager startUpdatingLocation]
    监听region:
    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self;
    CLCircularRegion *region = [[CLCircularRegion alloc]...];
    [self.locationManager requestAlwaysAuthorization];
    [self.locationManager startMonitoringForRegion:region];
    获取地理位置并监听region:
    在plist里同时设置NSLocationWhenInUseUsageDescription和NSLocationAlwaysUseUsageDescription,调用方式可以参考上面,但是需要注意的是,always的时候可能需要对模式进行判断。
    if (authorizationStatus == kCLAuthorizationStatusDenied || authorizationStatus == kCLAuthorizationStatusWhenInUse) {
    // TODO:do what you want e.g. goto setting view
    }
    [self.locationManager requestAlwaysAuthorization];
    [self.locationManager startMonitoringForRegion:region];
    D: 集成的时候可以使用responsToSelector来避免iOS7.和iOS8api不同引发的错误。
    E: 对于只是在MKMapView和Html5中使用的定位同样需要在plist中对提示增加自定义。

    @interface CLLocationManager (CLVisitExtensions)

    • (void)startMonitoringVisits NSAVAILABLE(NA, 80); // 开启监视
    • (void)stopMonitoringVisits NSAVAILABLE(NA, 80); // 停止监视

    三、在IOS8中定位功能新增了两个方法:

    - (void)requestWhenInUseAuthorization __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_8_0);
    - (void)requestAlwaysAuthorization __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_8_0);

    这两个新增的方法导致,之前写的程序在iOS8运行会出现,定位功能无法正常使用

    这样让iOS8正常使用定位功能呢?

    <1>你需要在info.plist表里面添加两条变量

    在Info.plist中加入两个缺省没有的字段

      • NSLocationAlwaysUsageDescription

      • NSLocationWhenInUseUsageDescription

    这两个字段没什么特别的意思,就是自定义提示用户授权使用地理定位功能时的提示语。

  • 相关阅读:
    第20月第30日 集体智慧编程
    第20月第29天 cocoa抽象工厂 cocoapods组件化 cocoapods升级
    第20月第28天 tensorflow
    第20月第27天 游戏编程的人工智能
    第20月第22天 2016计算机大会后记——机器学习:发展与未来
    第20月第18天 小码哥swift
    第20月第17天 mvvm 多次点击push -ObjC
    第20月第14天 objc_getAssociatedObject _cmd
    第20月第9天 paddlepaddle
    第20月第4天 pycharm utf-8
  • 原文地址:https://www.cnblogs.com/asd5551680/p/4182035.html
Copyright © 2011-2022 走看看