android - 如何在使用模拟位置时禁用 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 服务,但事实并非如此。
我在做一些明显错误的事情吗?
解决方案
对于遇到此问题的任何人,解决方案都非常简单。
尽管我的模拟实现正确地生成了模拟 GPS 位置修复,但模拟数据偶尔会与设备生成的真实位置修复相矛盾。
我最初认为这是因为真正的 GPS 提供商没有被适当地抑制,但事实证明,不需要的修复来自网络提供商,这是有道理的,因为我没有尝试模拟该提供商。
一个快速的解决方案是将设备的位置模式切换为仅设备(Android 设置 > 位置 > 模式)。这可确保设备仅使用 GPS 作为其位置数据源。
或者,可以扩展模拟实现以添加模拟网络位置提供程序,然后根据 Wi-fi 或蜂窝参考抑制设备位置数据。
推荐阅读
- java - 在 Java 中概括地记录事件,而不是每次发生
- powershell - 我想在 poweshell 中删除当前正在执行的文件夹及其内容
- excel - 我如何使用 SUMIF 不返回值而不是 0
- java - 有人可以帮助我在 rest-api 中使用文本文件吗?
- c# - .NET WinForms 高 DPI 缩放 - 如何在显示设置更改后强制表单正确显示?
- javascript - 使用动态键值对创建了一个对象,但访问显示未定义
- r - 带有sf的R中质心外的多边形
- php - Laravel 支付网关 - Softon\Indipay\Exceptions\IndipayParametersMissingException
- hadoop - 在 GCP 上运行 Spark 的问题
- python - 如何根据数据框的列名比较两个数据框