2015-06-19 31 views
7

Çeşitli mobil/gömülü linux aygıtlarında çalışması gereken küçük bir cihaza (C++ ile yazılmış) GUI işlevi gören bir Android uygulamasına sahibim. Daemon GPS verilerini toplayıp birkaç müşteriye (her biri bir GUI'ye sahip olan android telefonlar) iletmelidir. Arka planın, GUI olarak kullanılan aynı Android cihazlardan birinde çalışabilmesi gerekiyor, ancak C++ uygulamasından GPS verisine erişme konusunda çok fazla sorun yaşıyorum.C++ 'dan Android'e GPS üzerinden erişme

şimdiye kadar iki seçenek içine baktım:

1) "kalmak yerli" yöntemi: Ben gpsd) bu tür burada http://esr.ibiblio.org/?p=4886 olarak (Android için var olduğunu duydum, ama zor görünüyor ve/veya Samsung Galaxy SII cihazımda Cyanogenmod 10.1.3-i9100 (Android 4.2.2) çalıştıran mevcut değil. NDK'dan oluşturulan bağımsız araç gereçler, bu gibi siteler (http://www.jayway.com/2010/01/25/boosting-android-performance-using-jni/), java'nın yine de GPS ile konuşmak için C kodu kullanmak için JNI sarmalayıcılarını kullandığını göstermesine rağmen, gps ile ilgili hiçbir şey içermiyor gibi görünmektedir.

2) jni yöntemi: GPS, Android Java uygulamalarında gerçekten çok kolay görünüyor, bu yüzden JNI'yi aramaya başladım (bu arada Android ve Java için oldukça yeniyim). C kodunun ve Java kodunun etkileşime girmesinin bir yolu olduğunu kanıtlamak gerekiyor, değil mi? Bu sitede (http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/index.html) ve bu siteyi (http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/index.html) ve diğerlerinin bir kısmını okudum. Ama bana göre bir main() işlevi olan JNI kullanarak herhangi bir C kodu görmedim. Ayrıca, JNI_CreateJavaVM() işlevi NDK araç zincirimin jni.h başlık dosyasında yorumlanmıştır. Aslında, ilk etapta geçerli bir JNIEnv*'un nasıl bulunacağını anlayamıyorum. Geldiğim sonuç, JNI kodunun Java desteğine ihtiyaç duyan C uygulamaları değil, C desteğine ihtiyaç duyan Java uygulamaları tarafından kullanılması gerektiğidir. Bu doğru mu?

3) "yedek" yöntemini:

Sonra ben çok sevmiyorum üçüncü düşünce var belki C++ cin bir Android telefonda çalışan örneklerde, GPS verisi için Android GUI'sini sorabilir, sonra bunu diğer istemcilere yayınlayabilir mi? Bir soketle veya basit bir şeyle iletişim kurabileceğini düşünüyorum. Bu gerçekten çok çirkin bir çözüm gibi gözüküyor, çünkü verimsiz görünüyorsa, daemon herhangi bir GUI'den bağımsız çalışabilmelidir, ancak şimdi GPS verisi için GUI'ye bağlı olacaktır.

Asıl meselem, başka hiç kimsenin bu problemle karşılaştı ve uygun bir cevap buldu mu? Ya da belki de Android'de ya da Android'deki JNI ile ilgili bir şey anlamadığım bir şey var mı?

Okumak için teşekkürler.

cevap