一直运行的 iOS GPS 跟踪应用程序

2024-01-01

我正在尝试制作一个应用程序来始终跟踪用户的 GPS,该应用程序是一种汽车 GPS 跟踪器,用于始终获取驾驶员的位置并将其发送到服务器。

我尝试将“位置更新”添加到“后台模式”,但进入后台时应用程序将在 10 分钟后自动暂停。

有没有办法让这个应用程序一直运行并获取GPS位置?


您在这里有两个选择:

1)定期位置跟踪。
这种类型的跟踪适用于kCLAuthorizationStatusAuthorizedWhenInUse and kCLAuthorizationStatusAuthorizedAlways授权。什么时候CLLocationManager一旦在委托方法中收到位置更新,就开始跟踪位置locationManager:didUpdateLocations:。应用程序可以进入挂起状态,但是当位置管理器收到新位置时,应用程序将进入后台状态并在委托方法中处理新位置。如何设置位置管理器:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.locationManager = [[CLLocationManager alloc] init];

    // Setup location tracker accuracy
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;

    // Distance filter
    self.locationManager.distanceFilter = 50.f;

    // Assign location tracker delegate
    self.locationManager.delegate = self;

    // This setup pauses location manager if location wasn't changed
    [self.locationManager setPausesLocationUpdatesAutomatically:YES];

    // For iOS9 we have to call this method if we want to receive location updates in background mode
    if([self.locationManager respondsToSelector:@selector(allowsBackgroundLocationUpdates)]){
        [self.locationManager setAllowsBackgroundLocationUpdates:YES];
    }

    [self.locationManager startUpdatingLocation];
}


2) 意义位置变化跟踪。
这种类型的跟踪仅适用于kCLAuthorizationStatusAuthorizedAlways授权。它仅每 500 米接收一次新位置,因此距离过滤器和desiredAccuracy 在这里不起作用。应用程序可以进入挂起状态,甚至可以被系统终止,但是当位置更新时,应用程序进入后台状态并在委托方法中接收位置locationManager:didUpdateLocations:.
如果应用程序被系统终止,它将在后台重新启动UIApplicationLaunchOptionsLocationKey键入启动选项didFinishLaunchingWithOptions应用程序委托方法。如何在跟踪上设置此类型:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.locationManager = [[CLLocationManager alloc] init];

    // Assign location tracker delegate
    self.locationManager.delegate = self;

    // For iOS9 we have to call this method if we want to receive location updates in background mode
    if([self.locationManager respondsToSelector:@selector(allowsBackgroundLocationUpdates)]){
        [self.locationManager setAllowsBackgroundLocationUpdates:YES];
    }

    [self.locationManager startMonitoringSignificantLocationChanges];
}


您应该注意到,这两种方法都不能保证您的应用程序不会进入挂起状态。
此外,如果应用程序被用户终止(例如通过滑动从应用程序切换器终止),后台位置跟踪将无法工作。


UPDATE(对应评论)

这是适合我的代码示例:
用于定期跟踪 https://github.com/shpasta/location-tutorial-part-1。运行示例,提供对用户位置的访问,点击Start按钮开始位置更新。要测试模拟器中的位置,请在模拟器菜单中选择“调试”>“位置”>“高速公路驱动器”。现在您可以通过主页按钮(Command+Shift+H)将应用程序推送到后台。离开模拟器超过 10 分钟,应用程序将一直接收位置信息。当您返回应用程序时,您将在地图上看到红色图钉。
对于重大变更 https://github.com/shpasta/location-tutorial-part-2。运行应用程序并按照与前面示例相同的方式进行测试。
监控重大变化只能通过方法启动[self.locationManager startMonitoringSignificantLocationChanges];

UPDATE(iOS 11)

iOS 11 中位置跟踪的更改

iOS 11 还对现有 API 进行了一些重大更改。受影响的领域之一是位置跟踪。如果您的应用仅在应用处于前台时使用位置与大多数应用程序一样,您可能根本不需要更改任何内容;但是,如果它是全天连续跟踪用户位置的应用程序之一,您可能应该在今年夏天预订一些时间,对跟踪和测试可能的使用场景的方式进行一些更改。

请点击此链接:https://mackuba.eu/2017/07/13/changes-to-location-tracking-in-ios-11/ https://mackuba.eu/2017/07/13/changes-to-location-tracking-in-ios-11/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一直运行的 iOS GPS 跟踪应用程序 的相关文章

  • NSCalendar 返回明年第一周上周一的错误日期

    我使用下面的代码使用随机日期来计算上周一 哪个工作文件但我的代码在明年日期中断 下面是相同的代码 NSDate date NSDate dateWithTimeIntervalSince1970 1483620311 228 NSLog c
  • 无法从 iOS 中的框架访问 .nib(XIB) 文件

    我已经从现有的代码库中创建了一个框架 并尝试在新的代码库中使用它 这很好用 但是当我尝试访问属于我的框架包的一部分的 nib 文件时 我的应用程序崩溃了 这是我用来访问视图控制器 XIB 文件的代码 testViewController c
  • 如何在 Swift 中将文件名与文件扩展名分开?

    给定包中文件的名称 我想将该文件加载到我的 Swift 应用程序中 所以我需要使用这个方法 let soundURL NSBundle mainBundle URLForResource fname withExtension ext 无论
  • 如何检测用户是否禁用 GPS(Android - Play 服务)

    我使用 gms location LocationListener Google Play 服务 来获取用户的位置 它工作正常 但我想检测用户何时禁用或启用他 她的 GPS 就像这张照片一样 当我打开 关闭位置时 不会调用任何方法 当我切换
  • 无法连接到 iTunes Store(获取应用内购买列表)

    我正在尝试从我的应用程序的应用程序内购买项目商店中获取列表 这是我所做的 安装了新的配置文件并启用了应用内购买 替换配置文件很棘手 但我认为我的设置是正确的 验证税务和银行信息是否正常 该应用程序已在商店出售 创建测试用户 在测试设备上以测
  • 如何从 ContentView 外部显示 SwiftUI 警报?

    我正在构建 Swift 应用程序 并试图找出如何显示警报 我有一个单独的 swift 文件正在执行一些计算 并且在某些条件下我希望它向用户显示警报 基本上告诉他们出了问题 然而 我见过的大多数例子都要求警报在ContentView或以其他方
  • iOS、通用链接、Swift。 continueUserActivity 未调用

    我正在为我们的 iOS 应用程序实现通用链接 这是我的一小部分 AppDelegate private func application application UIApplication openURL url URL sourceApp
  • 从 UIPickerView 的选定行设置 UIButton 的标题

    详细场景是这样的 我使用循环创建 10 个按钮并设置 0 9 的标签 点击每个按钮时 我将调用 UIPickerView 在其中加载来自不同数组的数据 到这里我就得到了预期的结果 但我希望 pickerView 中选定的行应设置为相应按钮的
  • 如何保护 iOS 应用程序免受任何操作系统攻击(在越狱设备上)

    我希望保护我的应用程序数据 以防任何操作系统攻击或越狱 iOS 设备上的未经授权的访问 在这种情况下 有什么方法可以检测此类威胁并保护应用程序数据 虽然我同意 jrturton 的说法 但如果您有想要保护的关键数据免受流氓应用程序 而不是用
  • CALayer边框奇怪问题

    我正在向 CALayer 添加边框 但有一些奇怪的行为 在我应用的边框之后出现模糊边框 参见屏幕截图 这是我的代码 void configureLabel self hidden YES self textAlignment NSTextA
  • 从按钮执行 Segue 时应用程序冻结

    我的故事板中有一个按钮 它呈现一个带有模式序列的视图控制器 每次按下此按钮时 应用程序都会冻结 没有崩溃 也没有错误消息 prepareForSegue被调用 所有应该存在的视图控制器都在代码中prepareForSegue 但它们不会出现
  • 为什么 iOS 启动屏幕很慢?

    我的 iOS 应用程序启动屏幕大约需要 3 5 秒 我有一张将在启动屏幕后加载的地图 我的用户必须等待启动屏幕加载 然后再等待 3 秒才能加载地图 有没有办法最大限度地减少启动屏幕时间 基本上这种延迟意味着you在启动过程中做了一些非常错误
  • 从命令行添加 Xcode 开发者帐户

    我正在尝试使用xcodebuild allowProvisioningUpdates在我只能通过命令行访问的计算机 Azure Devops macOS 托管计算机 上 不幸的是 根据man xcodebuild为了使用 allowProv
  • ReactiveCocoa 将 SignalProducers 合二为一

    我正在使用 ReactiveCocoa 并且我有几个 SignalProducers let center NSNotificationCenter defaultCenter let signalProducer1 center rac
  • TableViewController 的 viewDidLoad 未触发

    我一直在关注这个tutorial http www appcoda com ios programming sidebar navigation menu 有一个滑出式菜单 我添加了一个 TableViewController 它将显示文章
  • 使用 MapKit 的地形和卫星视图

    我是 Mapkit View 的新手 当我给出没有目的地的纬度和经度时 我想显示 MapKit中是否可以通过地形 卫星视图来显示地图 有教程链接吗 我看过一些访问 Google 地图 API html 文件 的示例 有必要吗 或者您可以通过
  • 如何解决 Xcode 5 中的红色(已移动)文件?

    在 Xcode 4 中 当您要移动文件时 可以通过单击右侧菜单中的按钮并通过 Finder 选择新位置来解析文件的新位置 在 Xcode 5 中 右侧菜单中没有按钮 我还没有找到任何方法通过右键单击文件或顶部菜单栏选项来指定文件的新位置 在
  • 如何在 UICollectionView 中将行居中?

    我有一个UICollectionView与随机细胞 有什么方法可以让我将行居中吗 默认情况下它是这样的 x x x x x x x x x x x x x x 这是所需的布局 x x x x x x x x x x x x 我必须做这样的事
  • 在 Swift 中从 Parse 加载图像

    我成功地将数据从 Parse 提取到 swift 中 但我的图像似乎没有按照我的方式工作 在我的 cellForRowAtIndexPath 方法中 我执行以下操作 var event AnyObject eventContainerArr
  • ios - 如何声明静态变量? [复制]

    这个问题在这里已经有答案了 C 中声明的静态变量如下 private const string Host http 80dfgf7c22634nbbfb82339d46 cloudapp net private const string S

随机推荐

  • 借助 Google App Engine 灵活的环境提供多种服务

    使用普通的应用程序引擎 您可以通过创建 app yaml 的版本来定义服务 以前称为模块 在灵活的环境中 您似乎不能再这样做了 事实上 在使用旧的 module name 语法时它会崩溃 并会抛出术语 service name 的错误 有什
  • 如何单击 Cypress 中不可见的元素?

    我在 Cypress 中运行测试时遇到此错误 Timed out retrying after 10050ms cy click failed because this element is not visible 我怎样才能点击它呢 它只
  • Easy Auth 对某些人返回空响应

    我正在使用 auth me端点来获取用户的声明 我正在获取不记名令牌以便对端点进行身份验证 端点本身位于 Azure Function 源上 所以我要调用的是https azure function name azurewebsites n
  • 动态空指针数组

    我正在尝试创建一个基于动态数组的动态集抽象数据类型 但是 当我尝试将数据添加到数组时 我收到编译器警告和错误 它们是 警告 取消引用 void 指针 默认启用 错误 void 表达式的使用无效 我的代码如下 我用注释标记了有问题的行 str
  • Eclipse/PyCharm 中的 jython 设置

    Mac上使用Python 2 7 IDE是PyCharm 需要在Python脚本中使用一些Java函数 并且更喜欢使用Python的导入 例如from com a b c import fooFunc 这样我就可以使用fooFunc在 Py
  • ArrayFormula 与 GoogleFinance 动态日期

    首先 我不是一个强大的表格用户 我正在尝试使用 GOOGLEFINANCE 计算多种货币的金额 我用这个公式 IF A2 IF C2 C C2 C IF D2 D D2 D INDEX GoogleFinance CURRENCY USDU
  • jQuery - 动态添加验证规则到多个文本框

    我正在尝试动态地将验证规则添加到多个文本框 这是js validate form SubmitForm validate input id Hours rules add number true messages number Please
  • 具有非线性趋势的去趋势通量时间序列

    我需要对通量时间序列数据 光曲线 进行去趋势处理 但是当时间序列数据没有简单的线性趋势时 我遇到了问题 我一直在使用 scipy signal detrend 来消除线性情况的趋势 但这在这里还不够 我已经使用 numpy polyfit
  • 如何使用 Visual Studio 调试进程?

    如果应用程序 崩溃 我点击 调试 Visual Studio 是我当前注册的即时 JIT 调试器 Visual Studio 出现 但无法调试任何内容 我没有看到任何拆解 我没有看到任何寄存器 假设它在带有寄存器的 CPU 上运行 调用堆栈
  • 从 Type* 到 void* 是哪种类型的转换?

    在 C 中 对于任何数据类型 我可以执行以下操作 Type typedPointer obtain void voidPointer typedPointer 当我分配时执行哪个强制转换Type to void 这是否与 Type type
  • 在 Linux 内核中使用“sched_setaffinity()”

    网上有很多帖子sched setaffinity 但几乎没有人在内核空间中使用它 我使用的是内核 4 14 79 我尝试使用用户空间调用方法sched setaffinity形式为 cpu set t my set CPU ZERO my
  • Perl:从里到外展开列表不起作用?

    all this is some deeply nested text for you while all s f 1 seg sub f return split 0 print all 我希望 all 是一个 listref 其列表包含
  • 为什么我在尝试启动 Rails 控制台时收到 Readline 错误?

    更新 我在尝试其他地方找到的解决方案时可能弄乱了我的系统 我从头开始 顺利安装了 Ruby 1 9 3 现在尝试让 ree 1 8 7 一起玩得很好 我正在尝试在 Kubuntu 上使用 RVM 安装 Ruby 1 9 3 我相信是 11
  • 如何删除默认的 CRA React 图标?

    我已经删除了 head 标签中的链接 但图标仍然被渲染 是否可以删除或更改 您的图标位于 project root gt public gt favicon ico 中 public favicon ico 删除它很困难 因为如果浏览器找不
  • 在 GKE 上使用 nginx 入口控制器时负载均衡器的节点不健康

    我已经设置了 nginx 入口控制器如下本指南 https github com kubernetes ingress nginx blob master deploy README md 入口运行良好 我能够访问defaultbacken
  • 找不到 png.h 文件 - Linux

    我正在尝试跑步this http cvlab epfl ch cms site cvlab2 lang en software pom index php在 linux ubuntu 中 当我输入 make 时 它 会说 rgb image
  • 尝试使用 jQuery 隐藏 html 表的列

    function func id document ready function toggle click function td nth child id gt div toggle return false 我试图隐藏与单击的按钮对应的
  • 使用 select、group by 和 count 时如何获得非空结果集?

    这是当前的查询 SELECT status ct reconcile status IFNULL COUNT status ct reconcile status 0 AS sch change status num FROM db cre
  • 我可以使用WebRTC接收标准RTP视频流吗?

    我有两台计算机在同一网络上 其中一个使用 RTP 协议传输电影 H264 是否可以创建一个简单的 JavaScript 应用程序来在第二台计算机上接收此流并显示在视频标签中 到目前为止 我对WebRTC的印象是它被设计为在浏览器之间使用 都
  • 一直运行的 iOS GPS 跟踪应用程序

    我正在尝试制作一个应用程序来始终跟踪用户的 GPS 该应用程序是一种汽车 GPS 跟踪器 用于始终获取驾驶员的位置并将其发送到服务器 我尝试将 位置更新 添加到 后台模式 但进入后台时应用程序将在 10 分钟后自动暂停 有没有办法让这个应用