从C++访问安卓上的GPS
Access GPS on Android from C++
我有一个Android应用程序,它充当一个小守护程序(用C++编写)的GUI,需要在各种移动/嵌入式Linux设备上运行。 守护程序需要收集 GPS 数据并将其传递给多个客户端(安卓手机,每个客户端都有一个 GUI)。 守护程序需要能够在用作 GUI 的相同 Android 设备上运行,但我在从 C++ 守护程序访问 GPS 数据时遇到了很多麻烦。
到目前为止,我已经研究了两个选项:
1)"保持原生"方法:我听说gpsd适用于Android(例如这里 http://esr.ibiblio.org/?p=4886),但它似乎难以捉摸和/或不存在在我的三星Galaxy SII上运行Cyanogenmod 10.1.3-i9100(Android 4.2.2)。 我从NDK构建的独立工具链似乎根本没有任何与GPS相关的内容,即使像这样的网站(http://www.jayway.com/2010/01/25/boosting-android-performance-using-jni/)表明java使用JNI包装器使用C代码与GPS通信。
2)jni方法:GPS在Android Java应用程序中似乎很容易,所以我开始研究JNI(顺便说一下,我对Android和Java很陌生)。 它应该被证明是C代码和Java代码交互的一种方式,对吧? 我在这个网站(http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/index.html)和这个网站(http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/index.html)以及其他一些网站上阅读了它。 但是我突然想到,我还没有看到任何使用具有main()
功能的JNI的C代码。 此外,JNI_CreateJavaVM()
函数在我的 NDK 工具链的jni.h
头文件中被注释掉了。 事实上,我首先无法弄清楚如何拥有有效的JNIEnv*
。 我得出的结论是,JNI代码应该由需要C支持的Java应用程序使用,而不是需要Java支持的C应用程序。 这是对的吗?
然后我有第三个想法,我不太喜欢:
3)"备份"方法:在C++守护进程在Android手机上运行的情况下,也许它可以向android GUI询问GPS数据,然后将其广播给其他客户端?我想他们可能会通过插座或简单的东西进行交流。 这似乎是一个非常丑陋的解决方案,因为除了看起来效率低下之外,守护程序应该能够独立于任何 GUI 运行,但现在它将依赖于 GPS 数据的 GUI。
所以我真正的问题是,有没有人遇到过这个问题并找到了合适的答案? 或者也许有些东西我不了解Android中的gpsd,或者Android中的JNI?
感谢您的阅读。
我建议您尝试使用此代码:使用libhardware的Android GPS。
这个小项目使用 AOSP 的 libhardware 库。有关如何使用 GPS 抽象接口的详细信息,请参阅 gps.h。也值得一看 GpsLocationProvider.java 和 com_android_server_location_GpsLocationProvider.cpp.
- 如何使用 GPS 和指南针开发点移动算法
- 模拟GPS数据,以便使用Qt与Traccar一起使用
- GPS 的交叉编译显示"unrecognized option"
- 通过串行端口从GPS传感器读取
- GPS伪范围到纬度/纬度坐标
- 使用 std::chrono / date::gps_clock 将双 GPS 时间戳转换为 UTC/tai
- 在SD卡上读取和存储二进制GPS数据方面的问题
- 从GPS向SIGFOX传输数据
- 两个GPS点之间的碰撞
- 如何计算GPS数据
- Adafruit Fona 3G GPS没有任何反应
- 3G + GPS盾牌用于Arduino跟踪器
- 与GPS的串行通信-连续数据传输
- 如何在我的程序中检测GPS设备连接到的端口(C / C)
- C GPS方向置信算法
- 开源 c++ 程序,接收 GPS (NMEA) 句子或 x,y 协调并在地图上播放位置
- 使用C++处理GPS输出
- 查找表示 GPS 路线的两条线(MATLAB、Java、C++ 或 Python)之间的距离
- 平滑后的GPS数据比较
- 用于爱特梅尔 AVR 的车辆 GPS 跟踪