在Android上通过libhardware使用GPS

iam*_*ony 6 c++ gps android android-source

在AOSP有libhardare库包含接口,GPS驱动器- gps.h.使用此界面,您可以在低级别(C++)上访问GPS驱动程序,打开GPS并获取设备的当前位置.

在互联网上有几个项目,使用这个GPS接口.例如,这个由kanru创建.这段代码几乎完美 - 我可以连接到GPS驱动程序并获得正确的位置.

但是我遇到了一个问题.如果您使用kanru项目打开GPS驱动程序,并在一段时间后通过标准方法(在GUI中)打开GPS,那么C++程序将突然停止从GPS驱动程序接收信息.同时在GUI中,您可以看到GPS已开启,您可以启动Google地图或任何其他GPS相关应用程序并获取坐标.

我尝试GpsInterface通过hw_device_t指针重启,关闭和打开GPS驱动程序,甚至重启整个C++可执行文件 - 没有效果.重启程序后GPS驱动程序改变状态GPS_STATUS_ENGINE_ON然后 - 静音.

我还试图改变行动的顺序.我在GUI中启用了GPS,启动了Google地图并等了几分钟才到达我的位置.然后我开始了我的C++程序.它成功连接到GPS驱动程序并开始获取位置数据.同时GUI与GPS驱动器"丢失"连接.

我尝试在Android 4.2和5.1的几个设备上测试我的程序,并在大多数设备上遇到同样的问题.只有搭载Android 5.1的三星S6,我的程序能够在各种条件下完美运行.

在某些设备上似乎配置了GPS驱动程序,以便它只能与一个数据消费者一起使用.

也许有人遇到过类似的问题?