如何在 iOS 应用中添加位置信息

 更新时间:2021年02月26日 09:11:22   作者:张志敏  
这篇文章主要介绍了如何在 iOS 应用中添加位置信息,帮助大家更好的理解和学习使用ios,感兴趣的朋友可以了解下

最近要在 iOS 应用中添加位置信息, 需要满足的需求如下:

  • 应用在前台时能够获取位置信息;
  • 通过切换、 Home 按键将应用切换到后台时,停止获取位置信息;
  • 应用程序在前台运行, 直接锁定屏幕时,能够继续获取位置信息;

接下来逐步实现这三个需求。

获取设备位置信息

在 iOS 上获取位置信息是很容易的, 网上的资料也很多, 我的代码如下:

// make sure location service is enabled.
if (!CLLocationManager.LocationServicesEnabled) {
 return;
}
// create a new location manager
CLLocationManager 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();

第一次运行时, 系统会弹出应用要使用位置的对话框, 点击确认即可。

在锁屏情况下继续更新 GPS 信息

当程序运行时, 用户直接锁定屏幕, 会调用 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 应用中添加位置信息的资料请关注脚本之家其它相关文章!

相关文章

  • iOS11.3以下modal中input光标错位的解决方法

    iOS11.3以下modal中input光标错位的解决方法

    这篇文章主要介绍了iOS11.3以下modal中input光标错位的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • iOS中只让textField使用键盘通知的实例代码

    iOS中只让textField使用键盘通知的实例代码

    本文通过实例代码给大家介绍了OS中只让textField使用键盘通知的操作方法,代码简单易懂,非常不错,具有参考借鉴加载,需要的的朋友参考下吧
    2017-07-07
  • 详解iOS中多个网络请求的同步问题总结

    详解iOS中多个网络请求的同步问题总结

    这篇文章主要介绍了详解iOS中多个网络请求的同步问题总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 举例讲解iOS应用开发中hitTest触摸事件的编写方法

    举例讲解iOS应用开发中hitTest触摸事件的编写方法

    这篇文章主要介绍了举例讲解iOS应用开发中hitTest触摸事件的编写方法,重点讲解了两个view之间的事件传递,需要的朋友可以参考下
    2016-04-04
  • 解决Alamofire库在iOS7下设置Head无效的问题

    解决Alamofire库在iOS7下设置Head无效的问题

    本文主要介绍Alamofire库在iOS下设置Head,这里通过代码实例解决不同版本的IOS系统出现的问题,有需要的小伙伴可以参考下
    2016-07-07
  • iOS使用UICountingLabel实现数字变化的动画效果

    iOS使用UICountingLabel实现数字变化的动画效果

    本文主要介绍了iOS使用UICountingLabel实现数字变化动画效果的方法,具有一定的参考价值,下面跟着小编一起来看下吧
    2016-12-12
  • iOS仿AirPods弹出动画

    iOS仿AirPods弹出动画

    这篇文章主要为大家详细介绍了iOS仿AirPods弹出动画的实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • 基于IOS实现带箭头的view

    基于IOS实现带箭头的view

    这篇文章封装了一个比较常用的控件, 带箭头的View, iOS在很多场景下可以使用到带箭头的View,下面一起来学习学习。
    2016-08-08
  • iOS让软键盘消失的简单方法

    iOS让软键盘消失的简单方法

    一些文本输入控件等待输入时会弹出软键盘,我们可以设置这些控件的Did End On Exit之类的回调方法以在用户点击软键盘上的done或return之列的按键时收起键盘
    2016-02-02
  • Objective-C中的重载和重写详解

    Objective-C中的重载和重写详解

    这篇文章主要介绍了Objective-C中的重载和重写详解的相关资料,开发IOS APP的好多朋友很容易搞错重载和重写,这里就详细介绍下,需要的朋友可以参考下
    2016-11-11

最新评论