首页 > 解决方案 > 如何在使用模拟位置时禁用 Android GPS 接收器

问题描述

在开发依赖 GPS 定位服务的 Xamarin.Android 应用程序时,我使用单独的自定义应用程序来模拟沿预定义路线的移动。

模拟实现完全按预期工作,并且正在开发的应用程序正确接收其修复。但是,设备的真实 GPS 服务偶尔也会因与模拟位置相矛盾的实际 GPS 定位而中断。

[0:] Position: 37.8623530305552, 27.2595232774193 [Mock]
[0:] Position: 37.8623389227154, 27.2594691972361 [Mock]
[0:] Position: 37.8955245, 27.2769657 
[0:] Position: 37.8623248148509, 27.2594151170736 [Mock]
[0:] Position: 37.8623107069617, 27.2593610369318 [Mock]

我知道我可以过滤掉模拟位置,但这需要对我的消费应用程序进行硬编码才能知道它正在使用模拟数据,而我真的希望它不知道位置数据的来源。

我认为呼叫LocationManager.AddTestProvider会暂时禁用真正的 GPS 服务,但事实并非如此。

我在做一些明显错误的事情吗?

标签: androidxamarinmockinggps

解决方案


对于遇到此问题的任何人,解决方案都非常简单。

尽管我的模拟实现正确地生成了模拟 GPS 位置修复,但模拟数据偶尔会与设备生成的真实位置修复相矛盾。

我最初认为这是因为真正的 GPS 提供商没有被适当地抑制,但事实证明,不需要的修复来自网络提供商,这是有道理的,因为我没有尝试模拟该提供商。

一个快速的解决方案是将设备的位置模式切换为仅设备(Android 设置 > 位置 > 模式)。这可确保设备仅使用 GPS 作为其位置数据源。

或者,可以扩展模拟实现以添加模拟网络位置提供程序,然后根据 Wi-fi 或蜂窝参考抑制设备位置数据。


推荐阅读