package uk.ac.bbk.dcs.muc;
/**
*
* Life Logger for MUC
*
* Developer: Aruna Gunasekera and Sean Howes
*
*
*
*
*/
import java.util.List;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.view.Surface;
import android.widget.TextView;
public class LifeLog extends Activity implements LocationListener,
SensorEventListener {
private static final long ONE_SECOND = 1000l;
private static final long THIRTY_SECONDS = 30000l;
private static final long TEN_SECONDS = 10000;
private LocationManager mgr;
private SensorManager sensorManager;
private Sensor sensor;
private Sensor accel_sensor;
private Sensor light_sensor;
private TextView output;
private String best;
final int rate = SensorManager.SENSOR_DELAY_GAME;
// logging helper to write the kml file
FileLoggingHelper fileHelper;
private SoundRecorderHelper soundRecorder = new SoundRecorderHelper(ONE_SECOND, THIRTY_SECONDS);
private VideoRecorderHelper vidoeRecorder = new VideoRecorderHelper(ONE_SECOND, TEN_SECONDS,null);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mgr = (LocationManager) getSystemService(LOCATION_SERVICE);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
accel_sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
light_sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
output = (TextView) findViewById(R.id.output);
// log("Location providers:");
dumpProviders();
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);
best = mgr.getBestProvider(criteria, true);
fileHelper = new FileLoggingHelper();
log("\nBest provider is: " + best);
log("\nLocations (starting with last known):");
Location location = mgr.getLastKnownLocation(best);
displayScreen(location);
}
/**
* Called when the application is started
*/
@Override
protected void onResume() {
super.onResume();
// updating every 15 seconds
sensorManager.registerListener(this,sensor,rate);
sensorManager.registerListener(this, accel_sensor,rate);
sensorManager.registerListener(this, light_sensor,rate);
mgr.requestLocationUpdates(best, 15000, 1, this);
// record some sound every 30 seconds
soundRecorder.start();
//record some video every 10 seconds
//vidoeRecorder.start();
}
/**
* Called when the application is in the background
*/
@Override
protected void onPause() {
super.onPause();
sensorManager.unregisterListener(this);
mgr.removeUpdates(this);
soundRecorder.stop();
vidoeRecorder.stop();
}
public void onLocationChanged(Location location) {
displayScreen(location);
}
public void onProviderDisabled(String provider) {
log("\nProvider disabled: " + provider);
}
public void onProviderEnabled(String provider) {
log("\nProvider enabled: " + provider);
}
public void onStatusChanged(String provider, int status, Bundle extras) {
log("\nProvider status changed: " + provider);
}
private void log(String string) {
output.append(string + "\n");
}
private void dumpProviders() {
List<String> providers = mgr.getAllProviders();
for (String provider : providers) {
displayProvider(provider);
}
}
/**
* Display the provider to the screen
*
* @param provider
*/
private void displayProvider(String provider) {
LocationProvider info = mgr.getProvider(provider);
StringBuilder builder = new StringBuilder();
builder.append("LocationProvider[").append("name=").append(
info.getName()).append(",enabled=").append(
mgr.isProviderEnabled(provider)).append(",getAccuracy=")
.append(info.hasMonetaryCost()).append(",requiresCell=")
.append(info.requiresCell()).append(",requiresNetwork=")
.append(info.requiresNetwork()).append(",requiresSatellite=")
.append(info.requiresSatellite()).append("]");
log(builder.toString());
}
/**
* Displays the output to the screen
*
* @param location
*/
private void displayScreen(Location location) {
if (location == null)
log("\nLocation is null");
else
log("\n" + "Latitude " + location.getLatitude()
+ " Longitude " + location.getLongitude());
WriteToFile(location);
}
/**
* Write to the kml file
*
* @param loc
*/
private void WriteToFile(Location loc) {
fileHelper.WriteToFile(loc);
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
public void onSensorChanged(SensorEvent e) {
synchronized (this) {
switch (e.sensor.getType()){
case Sensor.TYPE_ACCELEROMETER:
log("x:"+Float.toString(e.values[0]) + " " + "y:"+Float.toString(e.values[1]) + " " + "z:"+Float.toString(e.values[2]));
break;
case Sensor.TYPE_ORIENTATION:
log("x:"+Float.toString(e.values[0]) + " " + "y:"+Float.toString(e.values[1]) + " " + "z:"+Float.toString(e.values[2]));
break;
}
}
// TODO Auto-generated method stub
}
}
|