LifeLog.java :  » Log » life-log » uk » ac » bbk » dcs » muc » Android Open Source

Android Open Source » Log » life log 
life log » uk » ac » bbk » dcs » muc » LifeLog.java
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

  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.