从C++访问Android上的GPS

rex*_*oni 9 c++ java-native-interface gps android

我有一个Android应用程序,用作一个需要在各种移动/嵌入式Linux设备上运行的小守护程序(用C++编写)的GUI.守护进程需要收集GPS数据并将其传递给多个客户端(Android手机,每个客户端都有一个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/implementation/index.html)和其他一些人.但它发生在我身上我没有看到任何使用具有main()函数的JNI的C代码.此外,该JNI_CreateJavaVM()功能在jni.h我的NDK工具链的头文件中被注释掉.事实上,我无法弄清楚如何JNIEnv*在第一时间有效.我得出的结论是,JNI代码旨在由需要C支持的Java应用程序使用,而不是需要Java支持的C应用程序.那是对的吗?

然后我有第三个想法,我不太喜欢:

3)"备份"方法:在Android手机上运行C++守护程序的情况下,也许它可以向android GUI询问GPS数据,然后将其广播给其他客户端?我想他们可能通过套接字或简单的东西进行通信.这似乎是一个非常难看的解决方案,因为除了看似效率低下之外,守护进程应该能够独立于任何GUI运行,但现在它将取决于GPS数据的GUI.

所以我真正的问题是,有没有其他人遇到这个问题并找到了合适的答案?或者也许有些东西我不了解Android中的某些东西,或者关于Android中的JNI?

谢谢阅读.

iam*_*ony 3

我建议您尝试使用此代码:Android GPS using libhardware

这个小项目使用AOSP 的libhardware 库。有关如何使用 GPS 抽象接口的更多信息,请参阅gps.h。还值得一看GpsLocationProvider.javacom_android_server_location_GpsLocationProvider.cpp