时间:2021-05-19
最近要在 iOS 应用中添加位置信息, 需要满足的需求如下:
接下来逐步实现这三个需求。
在 iOS 上获取位置信息是很容易的, 网上的资料也很多, 我的代码如下:
// make sure location service is enabled.if (!CLLocationManager.LocationServicesEnabled) { return;}// create a new location managerCLLocationManager locationManager = new CLLocationManager { DistanceFilter = CLLocationDistance.FilterNone, DesiredAccuracy = 1000};// check to work with both ios 6 and older.if (UIDevice.CurrentDevice.CheckSystemVersion(6, 0)) { locationManager.LocationsUpdated += OnLocationsUpdated;}else { locationManager.UpdatedLocation += OnLocationUpdated;}locationManager.StartUpdatingLocation();第一次运行时, 系统会弹出应用要使用位置的对话框, 点击确认即可。
当程序运行时, 用户直接锁定屏幕, 会调用 AppDelegate 的 DidEnterBackground 方法, 但是对于 iOS 应用来说, 用户切换程序或者点击 Home 按钮是, 也会调用这个函数, 这两种操作的区别在当前应用实例(UIApplication)的状态, 当用户切换程序或者点击 Home 按钮时, 应用的状态是 UIApplicationStateBackground , 而锁定屏幕时, 应用状态是 UIApplicationStateInactive , 使用下面的代码可以区分这两种情况:
public override void DidEnterBackground(UIApplication application) { if (application.ApplicationState == UIApplicationState.Background) { Log.Debug("App send to background by home button/switching to other app, stop upload location."); } else if (application.ApplicationState == UIApplicationState.Inactive) { Log.Debug("App send to background by locking screen, contine upload location, but change mode to powersave mode"); }}对于锁屏情况下继续更新位置信息的需求, 就很容易达到了, 只要在 DidEnterBackground 函数中检查应用的状态, 当状态为 UIApplicationBackground 是才停止更新位置, 代码如下:
public override void DidEnterBackground(UIApplication application) { // switch to other app or click home button, stop update location if (application.ApplicationState == UIApplicationState.Background) { locationManager.StopUpdatingLocation(); }}注意: 根据 Apple 的文档, DidEnterBackground 函数大约有 5 秒钟的执行时间, 如果超过 5 秒钟还没有从这个函数返回, 应用将会异常退出, 因此不要再这个函数中进行耗时的操作。
当应用切换到前台或者解锁时, 会调用 AppDelegate 的 WillEnterBackground 方法, 只要在这个方法中继续更新位置即可:
public override void WillEnterForeground(UIApplication application) { // app switch to foreground, continue to update location. locationManager.StartUpdatingLocation();}注意: 同样, WillEnterForeground 大约有 5 秒钟的执行时间, 因此也不要在这个函数中进行耗时的操作。
要真正能在锁屏状态下继续更新位置, 需要修改 info.plist ,增加后台位置权限。 找到项目中的 info.plist 文件, 双击打开, 并切换到 Source 标签, 如下图所示:
然后添加 Required background modes 属性项, 并将这个属性类型设置为 Array , 并为这个属性添加一个子项 Location-based information , 最终如下图所示:
也可以直接把下面的代码添加到 info.plist 文件中, 效果是一样的。
<key>UIBackgroundModes</key><array> <string>location</string></array>以上就是如何在 iOS 应用中添加位置信息的详细内容,更多关于iOS 应用中添加位置信息的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在使用iPhone时,可以选择是否允许应用使用您的位置信息。如果将设备升级到iOS14之后,还可以仅允许应用访问大致的位置。不妨来了解下在iOS14中如何控制共
小伙伴们在一些应用里都用过位置共享功能,在iOS8的信息应用中,现在你也可以分享自己的位置信息了。 打开信息应用。 在信息对话框中,点击详细信息即可以看
Html5中提供了地理位置信息的API,通过浏览器来获取用户当前位置。基于此特性可以开发基于位置的服务应用。在获取地理位置信息前,首先浏览器都会向用户询问是否愿
在iPhone上,您可以有效避免应用在不使用时仍然获取您的位置信息,并且隐藏照片的位置信息来保护个人隐私安全,方法如下,希望对大家有所帮助。防止泄露位置隐私信息
zenly冻结位置别人会知道。当Zenly账户冻结以后,您的位置信息会停留在最后更新地点,也就是说您的位置信息不会发生任何变化,就像您已经退出登录Zenly应用