文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2022-06-04 04:08

关注

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

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

获取设备位置信息

在 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 应用中添加位置信息的资料请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯