在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驱动程序,以便它只能与一个数据消费者一起使用.
也许有人遇到过类似的问题?
我使用Travis-CI为我的简单Qt应用程序进行持续集成.我的.travis.yml文件看起来像这样(基于这个要点):
language: cpp
before_install:
- sudo add-apt-repository --yes ppa:ubuntu-sdk-team/ppa
- sudo apt-get update -qq
- sudo apt-get install -qq g++ qt4-qmake libqt4-dev qt5-qmake qtbase5-dev
script:
- qmake -qt=qt4 -v
- qmake -qt=qt4
- make
- make -k check
- make clean
- qmake -qt=qt5 -v
- qmake -qt=qt5
- make
- make -k check
Run Code Online (Sandbox Code Playgroud)
这个配置允许我在Ubuntu(Qt 4.8.1和Qt 5.0.2)中使用默认的Qt库构建我的应用程序(并运行测试).
有没有办法用其他Qt版本(4.7.x,4.8.x,5.1.x等)构建应用程序?