package com.dappervision.wearscript.dataproviders; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import com.dappervision.wearscript.managers.DataManager; public class GPSDataProvider extends DataProvider { private final LocationListener locationListener; private LocationManager locationManager; public GPSDataProvider(final DataManager parent, long samplePeriod, int type) { super(parent, samplePeriod, type, "GPS"); locationManager = (LocationManager) parent.getContext().getSystemService(Context.LOCATION_SERVICE); locationListener = new LocationListener() { @Override public void onLocationChanged(Location l) { long timestamp = System.nanoTime(); DataPoint dataPoint = new DataPoint(GPSDataProvider.this, System.currentTimeMillis() / 1000., timestamp); dataPoint.addValue(Double.valueOf(l.getLatitude())); dataPoint.addValue(Double.valueOf(l.getLongitude())); dataPoint.addValue(Double.valueOf(l.getSpeed())); dataPoint.addValue(Double.valueOf(l.getBearing())); parent.queue(dataPoint); } @Override public void onProviderDisabled(String provider) { } @Override public void onProviderEnabled(String provider) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } }; for (String provider : locationManager.getProviders(true)) locationManager.requestLocationUpdates(provider, samplePeriod * 1000, 0, locationListener); } @Override public void unregister() { super.unregister(); locationManager.removeUpdates(locationListener); } }