From a1fb6bc1794ec6fef7457bbbf87055f1c9a2b546 Mon Sep 17 00:00:00 2001 From: steffen Date: Thu, 28 Mar 2013 23:08:17 +0000 Subject: [PATCH] android: gps seems to be running now. Strings will be transmitted between java and c++ --- android/AndroidManifest.xml | 9 ++-- android/jni/main.c | 26 +++++------- .../de/gulpe/sposmroute/spOSMrNActivity.java | 42 +++++++++++++++++-- 3 files changed, 52 insertions(+), 25 deletions(-) diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index 3f81ee4..ec3b44e 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -26,12 +26,9 @@ - - - - - - + + + diff --git a/android/jni/main.c b/android/jni/main.c index 6c1feb9..372d294 100644 --- a/android/jni/main.c +++ b/android/jni/main.c @@ -451,27 +451,23 @@ int gps_android_device_read (char *ptr, int ptrsize) { return 0; } - d_printf ("gps_android_device_read:"); - + /* call up the java method to prepare a new line */ +// d_printf ("gps_android_device_read: call java"); jclass clazz = (*env)->GetObjectClass(env, activity->clazz); jmethodID methodID = (*env)->GetMethodID(env, clazz, "GPSDataGetLine", "()V"); (*env)->CallVoidMethod(env, activity->clazz, methodID); - - d_printf ("try to get line"); +// d_printf ("gps_android_device_read: finished java call"); + /* retrieve the new line, copy new line, release new line */ jfieldID fid = (*env)->GetFieldID(env, clazz, "gpsline", "Ljava/lang/String;"); - jobject obj = (*env)->AllocObject(env, clazz); - if (!obj) { - d_printf ("error getting obj"); - exit (1); - } - - jstr = (*env)->GetObjectField(env, obj, fid); + jstr = (*env)->GetObjectField(env, activity->clazz, fid); str = (*env)->GetStringUTFChars(env, jstr, 0); - d_printf(" c.s = \"%s\"\n", str); +// d_printf ("str:%p", str); + if (str != NULL) + strncpy (ptr, str, ptrsize); + else ptr[0] = 0; + d_printf ("NMEA:%s", ptr); (*env)->ReleaseStringUTFChars(env, jstr, str); - d_printf ("release string"); (*jvm)->DetachCurrentThread(jvm); - - return -1; + return strlen (ptr); }; diff --git a/android/src/de/gulpe/sposmroute/spOSMrNActivity.java b/android/src/de/gulpe/sposmroute/spOSMrNActivity.java index 5d54a04..09731fd 100644 --- a/android/src/de/gulpe/sposmroute/spOSMrNActivity.java +++ b/android/src/de/gulpe/sposmroute/spOSMrNActivity.java @@ -1,28 +1,62 @@ package de.gulpe.sposmroute; import android.app.NativeActivity; - +import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; import android.os.Bundle; import android.util.Log; - +import android.content.Context; +import android.location.GpsStatus.NmeaListener; public class spOSMrNActivity extends NativeActivity { private static final String TAG = "spOSMroute Java"; spOSMrNActivity _activity; String gpsline; + String nmealine; + private LocationManager mLocMan; + private LocationListener mLocListener; int i = 0; public void onCreate(Bundle savedInstanceState) { + mLocMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE); + mLocListener = new MyLocationListener(); + mLocMan.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mLocListener); + mLocMan.addNmeaListener(new NmeaListener() { + public void onNmeaReceived(long timestamp, String nmea) { + nmealine = nmea; + } + }); + super.onCreate(savedInstanceState); // Make your custom init here _activity = this; } + + + private class MyLocationListener implements LocationListener { + @Override + public void onLocationChanged(Location loc) { + } + + @Override + public void onProviderDisabled(String provider) { + } + + @Override + public void onProviderEnabled(String provider) { + } + + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { + } + } // get gps data fill one line into gpsline public void GPSDataGetLine() { - i++; - gpsline = "Number: " + i; Log.i(TAG, "GPSDataGetLine called"); + gpsline = nmealine; + nmealine = ""; } // start gps part