package org.kost.android.sensorsweblogger; import android.app.Service; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.location.Location; import android.os.AsyncTask; import android.os.IBinder; import java.util.HashMap; public class TemplateSensor extends Service implements SensorEventListener { private static final String DEBUG_TAG = "SensorLoggerService"; private static final int SENSOR_DELAY = SensorManager.SENSOR_DELAY_NORMAL; private SensorManager sensorManager = null; private Sensor sensorSingle = null; protected int sensorType = Sensor.TYPE_PRESSURE; @Override public int onStartCommand(Intent intent, int flags, int startId) { sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); sensorSingle = sensorManager.getDefaultSensor(sensorType); if (sensorSingle!=null) { sensorManager.registerListener(this, sensorSingle, SENSOR_DELAY); } else { } return START_STICKY; } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // do nothing } @Override public void onSensorChanged(SensorEvent event) { long timestamp = event.timestamp; float value = event.values[0]; new SensorEventLoggerTask().execute(event); sensorManager.unregisterListener(this); stopSelf(); } private class SensorEventLoggerTask extends AsyncTask<SensorEvent, Void, Void> { @Override protected Void doInBackground(SensorEvent... events) { SensorEvent event = events[0]; long timestamp = event.timestamp; float value = event.values[0]; String sensorName=event.sensor.getName(); String lat; String lon; HashMap parms = new HashMap(); // Log.i("MySVC","timestamp: "+String.valueOf(timestamp)+" Sensor: "+sensorName+" Value: "+String.valueOf(value)); // SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences sharedPrefs = getSharedPreferences(getApplicationContext().getPackageName() + "_preferences", Context.MODE_PRIVATE); String device_name = sharedPrefs.getString("pref_device_name","MyDevice"); String url = sharedPrefs.getString("pref_url","http://127.0.0.1/"); // Location BestLastLocation LocationProv = new BestLastLocation(); Location CurLocation = LocationProv.getBestLocation(getApplicationContext()); if (CurLocation != null) { lat=String.valueOf(CurLocation.getLatitude()); lon=String.valueOf(CurLocation.getLongitude()); } else { lat="na"; lon="na"; } parms.put("device",device_name); parms.put("sensor",sensorName); parms.put("value",value); parms.put("timestamp",String.valueOf(timestamp)); parms.put("lat",lat); parms.put("lon",lon); SendSensorData c=new SendSensorData(); c.SendData(url,parms); return (null); } } @Override public void onDestroy() { sensorManager.unregisterListener(this); } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. throw new UnsupportedOperationException("Not yet implemented"); } }