7

我们正在为汽车司机开发 iPhone GPS 应用程序。

您可能知道,iOS4 引入了多任务处理,因此我们的应用程序可以在后台运行 - 确实如此。这是其功能的一部分。

问题在于在 iOS4 上关闭应用程序的标准方法。这里有两种情况:

1)用户想把应用程序放到后台:

通常,在 iPhone iOS4 上,它就像按下“主页”按钮一样简单。

2)用户想要关闭应用程序(即到达目的地后):

标准 iPhone iOS4 程序如下:

  • 按“主页”按钮 - 应用程序进入后台
  • 按两次“主页”按钮 - 出现正在运行的应用程序列表
  • 点击并按住其中一个应用程序图标 - 所有图标“摇动”和“-”符号出现在每个图标上
  • 在用户想要终止的应用程序图标上点击“-”号

用户每次到达某个地方(例如,一天两次)时都必须终止我们的应用程序,以节省电池电量。如果他不这样做 - GPS 会很快耗尽所有电池电量。此外,我们不能在后台运行时禁用 GPS,因为我们需要主要应用程序功能的精确位置信息。

当然,您不能从您的应用程序中更改“主页”按钮的行为(被 AppStore 接受)。此外,我认为将预期行为更改为与 iPhone 平台上的其他应用程序完全不同的东西并不是一个好的解决方案。

你怎么看?你知道任何好的解决方案。我们有一个想法,但我还不想向你推荐任何东西。

我们的解决方案非常简单:只需在屏幕右上角显示小“x”按钮即可。点击它会终止应用程序(可能在一些确认问题之后)。

这个解决方案有一个很大的优势:它不会改变默认的系统行为——知道 iOS4 多任务使用的用户仍然可以按“主页”按钮在后台运行应用程序并以 iPhone 方式关闭它。

你怎么看?

4

9 回答 9

6

Apple 建议您这样做(iPhone App Programming Guide):

应用程序只能注册重大的位置更改。(推荐)在 iPhone OS 4 及更高版本中,具有蜂窝无线电的设备提供了重大变化的定位服务。它提供了一种接收位置数据的低功耗方式,强烈推荐。仅当用户的位置发生显着变化时才提供新的位置更新。如果应用程序在运行此服务时被挂起,新的位置更新将导致应用程序在后台被唤醒以处理它们。同样,如果应用程序在运行此服务时终止,系统会在新的位置数据可用时自动重新启动应用程序。

您是否尝试通过调用startMonitoringSignificantLocationChangesCLLocationManager 的方法来使用它?

退出应用程序只能作为最后的手段。您可以在不使用位置服务时关闭它们,而无需退出应用程序。您可以调用stopUpdatingLocationCLLocationManager 将其关闭。

- (void)stopUpdatingLocation

当您的代码不再需要接收与位置相关的事件时,您应该调用此方法。当没有客户端需要位置数据时,禁用事件传递使接收器可以选择禁用适当的硬件(从而节省电力)。您始终可以通过再次调用 startUpdatingLocation 方法来重新生成位置更新。

于 2010-07-23T15:22:31.190 回答
3

也许有一个潜在的解决方法?这真的取决于你的应用程序。这是我为在后台运行 GPS 设计的应用程序所做的。

我强烈建议您startMonitoringSignificantLocationChanges在 CLLocationManager 中查看 iOS4 的 API。

行驶时,它会给你一个更新,精确到每 2 公里左右 500 米左右。如果这对您的应用程序来说还不够,您可以仅在系统执行您的应用程序时打开 GPS 硬件。这样,您仍然可以每约 2 公里获得非常准确的读数,但可以节省电池。

您也可以使用智能寻路和映射技术来“伪造”丢失的数据。

我用 8 部 iPhone 3GS-es 对背景 GPS 事件进行了实验。结果发布在这里: iPhone后台GPS/signfiicantLocationChange事件初步分析

于 2010-07-23T15:23:26.020 回答
2

你为什么不创建一个按钮,当他们到达目的地时可以按下它会设置一个标志说 Arrived = YES。

然后将其添加到应用程序中,以便在他们按下主页按钮时调用它。

- (void)applicationWillResignActive:(UIApplication *)application {
    if (Arrived) {
       exit(0);
    }
}

当他们按下主页按钮时,这将有效地完全关闭应用程序,但前提是他们已经表明他们已经到达。否则它将处于后台模式。

于 2011-04-12T02:45:48.573 回答
1

如果用户正在开车和移动,他们将需要准确的信息,这是真的。这并不意味着你也不能使用startMonitoringSignificantLocationChanges,不是吗?

换句话说,当您在一段可调的时间内停止接收“重大变化”时,使用超时来准确停止监控(并为 GPS 硬件供电)。当您再次收到它们时,再次开始准确监控。

于 2010-07-26T20:40:51.363 回答
1

由于您需要在后台运行以进行定位,而 Apple 不允许您终止自己的应用程序,因此您不得不让用户明白他们需要自己终止应用程序以节省电量。

一个快速的解决方案是在到达目的地后关闭定位服务。您甚至可以提醒用户发生这种情况,一旦他们点击“确定”按钮,如果应用程序被暂停,您可以阻止它运行和/或在后台运行。

于 2010-07-23T14:16:20.840 回答
0

如果用户正在积极进行路线导航并且他们进入后台,请继续使用 GPS,如果他们在目的地,请使用上述建议并切换到startMonitoringSignificantLocationChanges或关闭定位服务。灰色区域是如果用户靠近他们的目的地并且完成了 GPS 但还没有结束导航。即他们的目的地不在 GPS 认为的位置等。现在您正在积极导航,但永远不会到达目的地。为了避免打扰用户或依赖某些设置,我建议观察静止或至少没有进展,然后将其用作用户不再依赖你并切换到低功耗导航的线索。

于 2010-07-23T15:38:40.370 回答
0

我面前没有 Xcode(工作中的 PC),所以我无法查找您可以使用的任何方法,但我相信 TomTom 应用程序在后台运行时会进行某种监控,因为我记得收到警报通知它要睡觉了。我记得这发生在 5-10 分钟后。

于 2010-07-30T21:47:38.363 回答
0

我有一个在类似应用程序中使用的解决方案。我的导航栏中有一个“背景模式”按钮。用户点击它,他们会收到通知,当他们点击 Home 时,他们将在后台运行。每当应用程序启动或重新激活时,再次点击主页将导致应用程序无法运行。

然后,当按下 Home 按钮时,我检查标志以查看是否必须进入后台模式。我只是通过禁用 GPS 来避免后台模式(当在 UIbackgroundModes 中设置位置时,会导致应用程序暂停)

说得通?

于 2010-07-31T15:32:32.317 回答
0

是否可以从应用程序中关闭 GPS 监控?你不能添加一个按钮来关闭它而不是退出整个应用程序吗?IE。如关于 TomTom 应用程序所述,让应用程序进入睡眠状态。

如果是这样,您可能希望以某种方式更改 UI,以便用户可以看到 GPS 活动未运行,因此该应用程序未发挥全部功能。

于 2010-07-30T22:00:37.893 回答