在拨打电话时获取用户的位置
Posted
技术标签:
【中文标题】在拨打电话时获取用户的位置【英文标题】:Getting user's location while making a phone call 【发布时间】:2012-09-03 07:29:07 【问题描述】:在拨打电话号码时,我需要在后台获取准确的位置(尽可能准确)(呼叫将通过应用程序进行)。据我从文档中了解到,我可以听到背景位置的重大变化。我想知道重大更新的准确性如何,何时触发。
我需要拨打电话的地点,因为这将是紧急电话。而且在前台听位置然后拨打电话也不是一个好主意,因为这将是紧急情况 - 会立即拨打电话。
是否有解决方案可以在后台获取用户的准确位置?你有什么推荐的?
编辑:位置将立即发送到服务器。
【问题讨论】:
“我可以在后台听到位置的显着变化。”不是大多数手机都有GPRS吗? :S 这是一个奇怪的问题,但是,一个有趣的问题! 【参考方案1】:至于准确性,你可以在后台得到准确的位置,在conditions下:
在后台获取位置事件
如果您的应用程序需要在前台或后台提供位置更新,则有多种选择。首选选项是使用显着位置更改服务在适当的时间唤醒您的应用程序以处理新事件。但是,如果您的应用需要使用标准的定位服务,您可以将您的应用声明为需要后台定位服务。
仅当缺少这些服务会影响其运行能力时,应用程序才应请求后台位置服务。此外,任何请求后台定位服务的应用程序都应该使用这些服务为用户提供切实的好处。例如,逐向导航应用程序可能是后台定位服务的候选者,因为它需要跟踪用户的位置并报告何时该进行下一个转弯。
至于在通话中获取位置,我自己并没有使用它,但是像“waze”这样的导航应用会在通话期间通知转弯和导航事件,所以我猜你问的可能是什么。
如果我了解您的需求,您有两种选择:
如果您认为用户将是静态的,那么只需在调用之前获取用户位置即可。或者最好在您的应用午饭时拨打紧急电话。
如果用户正在移动,那么您可以“询问”以获取后台位置事件。 即便如此您也应该考虑使用“显着更改位置服务”,因为您不需要比用户位置更多的信息。标准的“定位服务”用于导航“转弯”服务。
*最后评论 *
如果您的应用是紧急应用,您应该阅读上一个链接中的“节省电池电量的提示”。您不希望您的用户电池在跟踪其位置时耗尽。
【讨论】:
感谢您的回答。我只需要在通话之前或通话期间跟踪一次位置。用户可能是静止的。我不知道我是否能保证在 3-5 秒内获得位置。应尽快拨打电话,因为拨打电话更为关键。我可能不需要省电方法,我会在第一次位置更新后关闭位置服务。【参考方案2】:难道你不能在你的应用 plist 文件中添加那个标志来请求定位服务在后台模式下运行吗?
然后在您的应用中,当用户按下“呼叫”按钮时,您可以在执行呼叫之前执行正常的 CLLocationManager didUpdateToLocation。
在您的 didUpdateToLocation 方法中,您可以在写入应用程序沙箱库/缓存文件夹的 TXT 文件中记录用户的位置,也可以使用 NSUserDefaults。
注意:我编写了一个应用程序,即使用户按下锁定屏幕,它也会在用户开车时记录他们的 GPS 位置,因此我相信即使应用程序被最小化,您的应用程序也可以将 GPS 坐标写入 TXT 文件,只要您启动您的位置管理器。
【讨论】:
以上是关于在拨打电话时获取用户的位置的主要内容,如果未能解决你的问题,请参考以下文章