2015-06-19 15 views
7

Tôi có một ứng dụng Android phục vụ như một GUI cho một daemon nhỏ (viết bằng C++) cần chạy trên nhiều thiết bị di động/nhúng Linux. Các daemon cần phải thu thập dữ liệu GPS và chuyển nó cho một số khách hàng (điện thoại android, mỗi với một GUI). Daemon cần có khả năng chạy trên một trong các thiết bị Android tương tự đang được sử dụng như GUI, nhưng tôi gặp rất nhiều rắc rối khi truy cập dữ liệu GPS từ trình nền C++.Truy cập GPS trên Android từ C++

Tôi đã nhìn vào hai lựa chọn cho đến nay:

1) Các "ở lại quê hương" phương pháp: Tôi đã nghe nói rằng GPSD tồn tại cho Android (ví dụ như ở đây http://esr.ibiblio.org/?p=4886), nhưng có vẻ như khó nắm bắt và/hoặc không tồn tại trên Samsung Galaxy SII của tôi, chạy CyanogenMod 10.1.3-i9100 (Android 4.2.2). Chuỗi công cụ độc lập của tôi được xây dựng từ NDK dường như không liên quan đến GPS, mặc dù các trang web như thế này (http://www.jayway.com/2010/01/25/boosting-android-performance-using-jni/) cho biết java sử dụng trình bao bọc JNI để sử dụng mã C để nói chuyện với GPS.

2) Phương pháp jni: GPS có vẻ thực sự dễ dàng trong các ứng dụng Java Android, vì vậy tôi bắt đầu xem xét JNI (tôi khá mới đối với Android và Java). Nó được cho là đã chứng minh một cách để mã C và mã Java tương tác, đúng không? Tôi đọc lên trên trang web này (http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/index.html) và trang web này (http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/index.html) và một loạt những người khác. Nhưng nó xảy ra với tôi tôi đã không nhìn thấy bất kỳ mã C bằng cách sử dụng JNI có một chức năng main() trong đó. Ngoài ra, hàm JNI_CreateJavaVM() được nhận xét trong tệp tiêu đề jni.h của chuỗi công cụ NDK của tôi. Trong thực tế, tôi không thể tìm ra cách để có một số JNIEnv* hợp lệ ngay từ đầu. Kết luận mà tôi đã nói đến là mã JNI được sử dụng bởi các ứng dụng Java cần hỗ trợ C, chứ không phải các ứng dụng C cần hỗ trợ Java. Đúng không?

Và sau đó tôi có một ý nghĩ thứ ba, mà tôi không thích rất nhiều:

3) các "sao lưu" phương pháp: Trong trường hợp mà ++ daemon C đang chạy trên điện thoại Android, có lẽ nó có thể hỏi GUI Android cho dữ liệu GPS, sau đó phát sóng cho các khách hàng khác? Tôi nghĩ rằng họ có thể giao tiếp thông qua một ổ cắm hoặc một cái gì đó đơn giản. Điều này có vẻ như một giải pháp thực sự xấu xí, mặc dù trên đầu trang dường như không hiệu quả, daemon sẽ có thể chạy độc lập với bất kỳ GUI nào, nhưng bây giờ nó sẽ phụ thuộc vào GUI cho dữ liệu GPS.

Vì vậy, câu hỏi thực sự của tôi là, có ai khác đã gặp sự cố này và tìm thấy câu trả lời phù hợp không? Hoặc có lẽ có cái gì đó tôi không hiểu một cái gì đó aobut gpsd trong Android, hoặc về JNI trong Android?

Cảm ơn bạn đã đọc.

Trả lời

Các vấn đề liên quan