android: gps seems to be running now. Strings will be transmitted between java and c++

master
steffen 13 years ago
parent ede8fc0768
commit a1fb6bc179

@ -26,12 +26,9 @@
</activity> </activity>
</application> </application>
<uses-feature android:glEsVersion="0x00020000" /> <uses-feature android:glEsVersion="0x00020000" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
</uses-permission>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE">
</uses-permission>
</manifest> </manifest>
<!-- END_INCLUDE(manifest) --> <!-- END_INCLUDE(manifest) -->

@ -451,27 +451,23 @@ int gps_android_device_read (char *ptr, int ptrsize) {
return 0; 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); jclass clazz = (*env)->GetObjectClass(env, activity->clazz);
jmethodID methodID = (*env)->GetMethodID(env, clazz, "GPSDataGetLine", "()V"); jmethodID methodID = (*env)->GetMethodID(env, clazz, "GPSDataGetLine", "()V");
(*env)->CallVoidMethod(env, activity->clazz, methodID); (*env)->CallVoidMethod(env, activity->clazz, methodID);
// d_printf ("gps_android_device_read: finished java call");
d_printf ("try to get line"); /* retrieve the new line, copy new line, release new line */
jfieldID fid = (*env)->GetFieldID(env, clazz, "gpsline", "Ljava/lang/String;"); jfieldID fid = (*env)->GetFieldID(env, clazz, "gpsline", "Ljava/lang/String;");
jobject obj = (*env)->AllocObject(env, clazz); jstr = (*env)->GetObjectField(env, activity->clazz, fid);
if (!obj) {
d_printf ("error getting obj");
exit (1);
}
jstr = (*env)->GetObjectField(env, obj, fid);
str = (*env)->GetStringUTFChars(env, jstr, 0); 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); (*env)->ReleaseStringUTFChars(env, jstr, str);
d_printf ("release string");
(*jvm)->DetachCurrentThread(jvm); (*jvm)->DetachCurrentThread(jvm);
return strlen (ptr);
return -1;
}; };

@ -1,28 +1,62 @@
package de.gulpe.sposmroute; package de.gulpe.sposmroute;
import android.app.NativeActivity; import android.app.NativeActivity;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.content.Context;
import android.location.GpsStatus.NmeaListener;
public class spOSMrNActivity extends NativeActivity { public class spOSMrNActivity extends NativeActivity {
private static final String TAG = "spOSMroute Java"; private static final String TAG = "spOSMroute Java";
spOSMrNActivity _activity; spOSMrNActivity _activity;
String gpsline; String gpsline;
String nmealine;
private LocationManager mLocMan;
private LocationListener mLocListener;
int i = 0; int i = 0;
public void onCreate(Bundle savedInstanceState) { 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); super.onCreate(savedInstanceState);
// Make your custom init here // Make your custom init here
_activity = this; _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 // get gps data fill one line into gpsline
public void GPSDataGetLine() { public void GPSDataGetLine() {
i++;
gpsline = "Number: " + i;
Log.i(TAG, "GPSDataGetLine called"); Log.i(TAG, "GPSDataGetLine called");
gpsline = nmealine;
nmealine = "";
} }
// start gps part // start gps part

Loading…
Cancel
Save