iOS8中的定位服务

iOS8中的定位服务

My app that worked fine in iOS 7 doesn't work with the iOS 8 SDK.

CLLocationManager doesn't return a location, and I don't see my app under Settings > Location Services either. I did a Google search on the issue but nothing came up, what could be wrong?

我的应用在iOS7上运行得好好的,但是到了iOS8上就出问题了.

在iOS8中,CLLocationManager并没有返回一个地址,而且,我也没有在Settings>Location Services中找到该服务,在Google上也没查到类似的问题,请问到底哪里出问题了?

 

I ended up solving my own problem.

Apparently in iOS 8 SDK, requestAlwaysAuthorization (for background location) or requestWhenInUseAuthorization (location only when foreground) call on CLLocationManager is needed before starting location updates.

There also needs to be NSLocationAlwaysUsageDescription or NSLocationWhenInUseUsageDescription key in Info.plist with a message to be displayed in the prompt. Adding these solved my problem.

Hope it helps someone else.

最后我解决了这个问题.

在iOS8的sdk中,你需要额外的requestAlwaysAuthorization(用作后台定位)以及requestWhenInUseAuthorization(用作前台定位),在调用CLLocationManager更新地址之前你都需要调用上述两个方法.你还需要在Info.plist文件中额外的添加NSLocationAlwaysUsageDescription以及NSLocationWhenInUseUsageDescription,这么做了之后才解决了我的问题.

 

According to the Apple docs:

https://developer.apple.com/library/prerelease/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/index.html#//apple_ref/occ/instm/CLLocationManager/requestWhenInUseAuthorization

As of iOS 8, the presence of a NSLocationWhenInUseUsageDescription or a NSLocationAlwaysUsageDescription key value in your app's Info.plist file is required. It's then also necessary to request permission from the user prior to registering for location updates, either by calling [self.myLocationManager requestWhenInUseAuthorization] or [self.myLocationManager requestAlwaysAuthorization] depending on your need. The string you entered into the Info.plist will then be displayed in the ensuing dialog.

If the user grants permission, it's business as usual. If they deny permission, then the delegate is not informed of location updates.

根据苹果的官方文档:

https://developer.apple.com/library/prerelease/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/index.html#//apple_ref/occ/instm/CLLocationManager/requestWhenInUseAuthorization

在iOS8上,你需要在你的plist文件中添加新的键值NSLocationWhenInUseUsageDescription或者NSLocationAlwaysUsageDescription.然后,每次定位的时候你都需要获取用户的授权信息,通过调用[self.myLocationManager requestWhenInUseAuthorization] 或者[self.myLocationManager requestAlwaysAuthorization],至于调用哪一个,这就根据你自己的需求了.那个你添加进plist文件中的键值信息会在确认的信息中有提示.

如果用户允许你定位,你可以像往常那样子使用定位功能.如果他们拒绝了,那么,这个定位的更新更能永远也不会被执行.

时间: 2022-12-08

iOS8中的定位服务的相关文章

IOS定位服务的应用

IOS定位服务的应用 一.授权的申请与设置 在IOS8之后,IOS的定位服务做了优化,若要使用定位服务,必须先获取用户的授权. 首先需要在info.plist文件中添加一个键:NSLocationAlwaysUsageDescription或者NSLocationWhenInUseUsageDescription.其中NSLocationAlwaysUsageDescription是要始终使用定位服务,NSLocationWhenInUseUsageDescription是只在前台使用定位服务.

Broadcom升级LBS提供Wi-Fi定位服务

Broadcom( 博通)公司宣布它将对其定位服务(LBS)基础设施进行升级,以便在其定位服务系列中添加Wi-Fi定位.Broadcom公司将充分利用它在GPS和Wi-Fi两种技术上的领先地位,并使用由Skyhook Wireless公司(它在开发Wi-Fi定位方面处于领军地位)开发的Wi-Fi定位系统,集成.部署和提供这种 新的功能.Broadcom LBS基础设施是全球最大和分布最广的设备之一,而且,从2002年起 Broadcom公司的托管LBS服务一直销售给顶级的手机营运商和移动设备制造

百度地图-在android开发中使用百度LBS定位服务无法稳定准确获得地理位置

问题描述 在android开发中使用百度LBS定位服务无法稳定准确获得地理位置 程序代码如下所示,我是仿照网上的实例编写的,在manifests文件中已经添加了识别码以及百度定位的service,权限也按照百度的说明文档添加好了,在虚拟机中运行效果为无法获取地理位置,错误码62,真机运行则毫无反应,我完全找不到是什么地方出了问题,哪位大大可以帮我看一下吗? import android.os.Bundle; import android.support.v4.app.Fragment; impo

详细分析Android系统中定位服务的架构和实现

对于 Android 的应用开发人员来说,本文可以帮助他们了解他们所使用的 API 背后的实现.对于 Android 的系统开发人员来说,本文可以帮助他们更好的了解 Android 系统架构. 定位服务是移动设备上最常用的功能之一,下文以 Android 源码为基础,详细分析了 Android 系统中定位服务的架构和实现. 定位服务是 Android 系统提供的一项系统服务,在 Android 系统中,所有系统服务的架构都是类似的.只要明白其中一个,然后再去理解其他是很容易的. 对于 Andro

苹果或在下一代iPhone中增加室内定位服务 - 新闻中心

[赛迪网讯]3月26日消息,据国外http://www.aliyun.com/zixun/aggregation/31646.html">媒体报道,苹果日前收购了室内GPS导航服务提供商WiFiSlam公司,看起来苹果在准备与谷歌开战.WiFiSlam是一家向用户提供室内定位服务的公司,收购WiFiSlam之举表明苹果可能在iPhone 6增加室内定位服务功能. 苹果以2000万美元的价格收购了WiFiSlam,此举表明苹果可能会向其iOS智能手机及平板电脑用户提供室内地图及定位服务.为解

ios-iOS 9在使用定位服务获取经纬度的时候,系统不调用代理方法,怎么解决?

问题描述 iOS 9在使用定位服务获取经纬度的时候,系统不调用代理方法,怎么解决? @interface NearbyViewController (){ // CLLocationManager *_locationManager; CLGeocoder *_lgeocoder; } @property (strong, nonatomic) CLLocationManager *locationManager; @end (void)viewDidLoad { [super viewDidL

iOS 6定位服务编程详解

现在的移动设备很多都提供定位服务,使用iOS系统的iPhone.iPod Touch和iPad都可以提供位置服务,iOS设备能提供3种不同途径进行定位:Wifi, 蜂窝式移动电话基站, GPS卫星 iOS不像Android系统在定位服务编程时,可以指定采用哪种途径进行定位.iOS的API把底层这些细节屏蔽掉了,开发人员和用户并不知道现在设备是采用哪种方式进行定位的,iOS系统会根据设备的情况和周围的环境,采用一套最佳的解决方案.这个方案是这样的,如果能够接收GPS信息,那么设备优先采用GPS定位

在Windows XP系统中安装远程启动服务

  所需软件:DLC协议程序,将下载后的文件解压到一个目录中(如 D:XPRPL),注意如果您使用的是10/100自适应的网卡,一定要将网线的另一端联好开机,即保证"本地连接"是启用的,在"本地连接"中选择<安装>,选择协议从磁盘安装,定位到XPRPL 目录,就能成功的安装DLC 协议了. 如上图DLC 协议已经被添加到"本地连接"中执行xprpl.exe 出现的居然是凌心当年为win2000写的RPL安装程序,安照要求添加好 net

ios8.3系统定位不起作用

问题描述 ios8.3系统定位不起作用 在8以下的系统能够定位成功,在8以上就不成功了,请问应该怎么改 解决方案 因为从8开始需要询问用户是否开启定位功能?网上搜下 解决方案二: 在调用 [self.locationManager startUpdatingLocation];方法前面加一下 下面的代码试试~! if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) { [self.locationManager req