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>
</application>
<uses-feature android:glEsVersion="0x00020000" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
</uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE">
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
</manifest>
<!-- END_INCLUDE(manifest) -->

@ -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);
};

@ -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

Loading…
Cancel
Save