Hecl and GPS on Android |
||||
Главная | Программные продукты | Freesource программные продукты | Статьи по Tcl/Tk | Статьи | Контакт | Карта сайта | |||
|
The Hecl Programming Language is a high-level scripting language implemented in Java, created by David N. Welton. This are sources using with hecl for gpsmta - GPS tracker / GPS monitoring for Android Sorry, I do not know java. This code for the specialist may seem strange :-) Hecl and GPS on Android1. Create file hecl/android/src/org/hecl/android/MyLocation.java ----------------------------------------------------- package org.hecl.android; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.util.Log; import java.util.Vector; import java.lang.reflect.Method; import java.lang.reflect.Field; import org.hecl.DoubleThing; import org.hecl.HeclException; import org.hecl.Interp; import org.hecl.IntThing; import org.hecl.ListThing; import org.hecl.LongThing; import org.hecl.ObjectThing; import org.hecl.Properties; import org.hecl.StringThing; import org.hecl.Thing; public class MyLocation implements LocationListener { private final LocationManager mLocationManager; private Location mLocation; public static Interp interp; public static Thing onLocationChangedCallBack = null; public static Thing onStatusChangedCallBack = null; public static Thing onProviderEnabledCallBack = null; public static Thing onProviderDisabledCallBack = null; private long mLocationUpdateMinTime = 1000; private float mLocationUpdateMinDistance = 0; public MyLocation(Context context) { mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); } public long getLocationUpdateMinTime() { return mLocationUpdateMinTime; } public void setLocationUpdateMinTime(final long milliSeconds) { mLocationUpdateMinTime = milliSeconds; } public float getLocationUpdateMinDistance() { return mLocationUpdateMinDistance; } public void setLocationUpdateMinDistance(final float meters) { mLocationUpdateMinDistance = meters; } public LocationListener getLocationListener() { return this; } public LocationManager getLocationManager() { return mLocationManager; } public void startLocationProvider() { try { mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, mLocationUpdateMinTime, mLocationUpdateMinDistance, this); } catch (Exception e) { Log.v(">>>>> gpsmta ERROR Start GPS_PROVIDER", e.toString()); } try { mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, mLocationUpdateMinTime, mLocationUpdateMinDistance, this); } catch (Exception e) { Log.v(">>>>> gpsmta ERROR Start NETWORK_PROVIDER", e.toString()); } } public void startLocationProviderNetwork() { try { mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, mLocationUpdateMinTime, mLocationUpdateMinDistance, this); } catch (Exception e) { Log.v(">>>>> gpsmta ERROR Start NETWORK_PROVIDER", e.toString()); } } public void startLocationProviderGPS() { try { mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, mLocationUpdateMinTime, mLocationUpdateMinDistance, this); } catch (Exception e) { Log.v(">>>>> gpsmta ERROR Start GPS_PROVIDER", e.toString()); } } public void stopLocationProvider() { mLocationManager.removeUpdates(this); } public Boolean isProviderEnabled(String provider) { return mLocationManager.isProviderEnabled(provider); } @Override public void onLocationChanged(final Location location) { if (onLocationChangedCallBack != null) { try { Vector vec = ListThing.get(onLocationChangedCallBack.deepcopy()); vec.add(ObjectThing.create(location)); interp.eval(ListThing.create(vec)); } catch (Exception e) { Log.v(">>>>> gpsmta ERROR onLocationChangeCallBack", e.toString()); } } } @Override public void onProviderDisabled(final String provider) { if (onProviderDisabledCallBack != null) { try { Vector vec = ListThing.get(onProviderDisabledCallBack.deepcopy()); vec.add(ObjectThing.create(provider)); interp.eval(ListThing.create(vec)); } catch (Exception e) { Log.v(">>>>> gpsmta ERROR onProviderDisabledCallBack", e.toString()); } } } @Override public void onProviderEnabled(final String provider) { if (onProviderEnabledCallBack != null) { try { Vector vec = ListThing.get(onProviderEnabledCallBack.deepcopy()); vec.add(ObjectThing.create(provider)); interp.eval(ListThing.create(vec)); } catch (Exception e) { Log.v(">>>>> gpsmta ERROR onProviderEnabledCallBack", e.toString()); } } } @Override public void onStatusChanged(final String provider, final int status, final Bundle extras) { if (onStatusChangedCallBack != null) { try { Vector vec = ListThing.get(onStatusChangedCallBack.deepcopy()); vec.add(ObjectThing.create(provider)); vec.add(ObjectThing.create(status)); interp.eval(ListThing.create(vec)); } catch (Exception e) { Log.v(">>>>> gpsmta ERROR onStatusChangeCallBack", e.toString()); } } } } 2. Recompile Hecl
ant packageAndroidBuilder
3. Using with Hecl java android.location.Location location java org.hecl.android.MyLocation MyLocation global locationCurr myLocation set context [activity] set myLocation [MyLocation -new $context] set i [thisinterp] $myLocation -field interp $i $myLocation -field onLocationChangedCallBack GPS:onLocationChanged set locationCurr [location -new gps] $locationCurr reset proc GPS:onLocationChanged { location } { global locationCurr $locationCurr set $location set provider [$locationCurr getprovider] set milliseconds [$locationCurr gettime] set lon [$locationCurr getlongitude] set lat [$locationCurr getlatitude] set speed [$locationCurr getspeed] set height [$locationCurr getaltitude] set azimuth [$locationCurr getbearing] set accuracy [$locationCurr getaccuracy] } |
|||||||||
Copyright © Эдуард Зозуля | ||||||||||