如何在 iOS 应用中添加位置信息
最近要在iOS应用中添加位置信息,需要满足的需求如下:
- 应用在前台时能够获取位置信息;
- 通过切换、Home按键将应用切换到后台时,停止获取位置信息;
- 应用程序在前台运行,直接锁定屏幕时,能够继续获取位置信息;
接下来逐步实现这三个需求。
获取设备位置信息
在iOS上获取位置信息是很容易的,网上的资料也很多,我的代码如下:
//makesurelocationserviceisenabled. if(!CLLocationManager.LocationServicesEnabled){ return; } //createanewlocationmanager CLLocationManagerlocationManager=newCLLocationManager{ DistanceFilter=CLLocationDistance.FilterNone, DesiredAccuracy=1000 }; //checktoworkwithbothios6andolder. if(UIDevice.CurrentDevice.CheckSystemVersion(6,0)){ locationManager.LocationsUpdated+=OnLocationsUpdated; } else{ locationManager.UpdatedLocation+=OnLocationUpdated; } locationManager.StartUpdatingLocation();
第一次运行时,系统会弹出应用要使用位置的对话框,点击确认即可。
在锁屏情况下继续更新GPS信息
当程序运行时,用户直接锁定屏幕,会调用AppDelegate的DidEnterBackground方法,但是对于iOS应用来说,用户切换程序或者点击Home按钮是,也会调用这个函数,这两种操作的区别在当前应用实例(UIApplication)的状态,当用户切换程序或者点击Home按钮时,应用的状态是UIApplicationStateBackground,而锁定屏幕时,应用状态是UIApplicationStateInactive,使用下面的代码可以区分这两种情况:
publicoverridevoidDidEnterBackground(UIApplicationapplication){ if(application.ApplicationState==UIApplicationState.Background){ Log.Debug("Appsendtobackgroundbyhomebutton/switchingtootherapp,stopuploadlocation."); } elseif(application.ApplicationState==UIApplicationState.Inactive){ Log.Debug("Appsendtobackgroundbylockingscreen,contineuploadlocation,butchangemodetopowersavemode"); } }
对于锁屏情况下继续更新位置信息的需求,就很容易达到了,只要在DidEnterBackground函数中检查应用的状态,当状态为UIApplicationBackground是才停止更新位置,代码如下:
publicoverridevoidDidEnterBackground(UIApplicationapplication){ //switchtootherapporclickhomebutton,stopupdatelocation if(application.ApplicationState==UIApplicationState.Background){ locationManager.StopUpdatingLocation(); } }
注意:根据Apple的文档,DidEnterBackground函数大约有5秒钟的执行时间,如果超过5秒钟还没有从这个函数返回,应用将会异常退出,因此不要再这个函数中进行耗时的操作。
当应用切换到前台或者解锁时,会调用AppDelegate的WillEnterBackground方法,只要在这个方法中继续更新位置即可:
publicoverridevoidWillEnterForeground(UIApplicationapplication){ //appswitchtoforeground,continuetoupdatelocation. locationManager.StartUpdatingLocation(); }
注意:同样,WillEnterForeground大约有5秒钟的执行时间,因此也不要在这个函数中进行耗时的操作。
为应用添加后台位置权限
要真正能在锁屏状态下继续更新位置,需要修改info.plist,增加后台位置权限。找到项目中的info.plist文件,双击打开,并切换到Source标签,如下图所示:
然后添加Requiredbackgroundmodes属性项,并将这个属性类型设置为Array,并为这个属性添加一个子项Location-basedinformation,最终如下图所示:
也可以直接把下面的代码添加到info.plist文件中,效果是一样的。
UIBackgroundModes location
以上就是如何在iOS应用中添加位置信息的详细内容,更多关于iOS应用中添加位置信息的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。