First commit

This commit is contained in:
Manos
2015-11-08 01:17:41 +02:00
parent 255e90323a
commit a441877947
6 changed files with 813 additions and 0 deletions

168
Sensing/DemoLocation.java Normal file
View File

@ -0,0 +1,168 @@
/**
* A simple sensing task that logs the location the device has remained at for
* a defined period of time.
*/
import java.io.*;
import java.util.*;
import android.content.*;
import android.hardware.Sensor;
import android.location.*;
import android.os.*;
import android.util.*;
public class DemoLocation implements LocationListener {
Context context;
List<Object> data;
LocationManager locMgr;
LocationListener locLnr;
Location lastLoc;
// Timer and total time definition.
CountDownTimer timer;
int hours = 0;
int minutes = 0;
int seconds = 5;
// Convert the above to milliseconds.
int timeTotal = (hours * 3600 + minutes * 60 + seconds) * 1000;
public void onStart(Context c, ObjectInputStream s) throws Exception {
String TAG = getClass().getName() + "@onStart: ";
Log.wtf(TAG, "...");
context = c;
data = new ArrayList<>();
timer = new CountDownTimer(timeTotal, 1000) {
public void onTick(long arg0) {
String TAG = getClass().getName() + "@onTick: ";
// Log.wtf(TAG, arg0 / 1000 + " seconds remaining...");
}
// Log the current location.
public void onFinish() {
String TAG = getClass().getName() + "@onFinish: ";
Log.wtf(TAG, lastLoc.toString());
// add location to data
Map<String, Object> newData = new HashMap<>();
double[] values = new double[2];
values[0] = lastLoc.getLatitude();
values[1] = lastLoc.getLongitude();
newData.put("sensor", Sensor.TYPE_ALL);
// newData.put("timestamp", lastLoc.getTime() * 1000000);
newData.put("timestamp", System.currentTimeMillis() * 1000000L);
newData.put("values", values);
data.add(newData);
}
};
// Monitor location changes.
locMgr = (LocationManager) context.getSystemService(context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
String provider = locMgr.getBestProvider(criteria, true);
if(provider == null) {
provider = locMgr.getBestProvider(criteria, false);
}
locMgr.requestLocationUpdates(provider, 1000, 1, this);
Location loc = locMgr.getLastKnownLocation(provider);
if (loc != null) {
Log.wtf(TAG, provider + " provider selected.");
onLocationChanged(loc);
}
else {
Log.wtf(TAG, "Location not available.");
}
}
public boolean saveState(ObjectOutputStream s) {
String TAG = getClass().getName() + "@saveState: ";
Log.wtf(TAG, "...");
return false;
}
public List<Object> getData() {
String TAG = getClass().getName() + "@getData: ";
Log.wtf(TAG, "...");
List<Object> tmp = data;
data = new ArrayList<>();
return tmp;
}
public void onStop() {
String TAG = getClass().getName() + "@onStop: ";
Log.wtf(TAG, "...");
// Stop the timer.
if(timer != null) {
timer.cancel();
}
// Release the location listener.
if(locMgr != null) {
locMgr.removeUpdates(locLnr = this);
}
}
/**/
// Called when the location has changed.
@Override
public void onLocationChanged(Location loc) {
String TAG = getClass().getName() + "@onLocationChanged: ";
Log.wtf(TAG, "...");
Log.wtf(TAG, loc.toString());
lastLoc = loc;
if (timer != null) {
timer.cancel();
}
timer.start();
}
@Override
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}
}

View File

@ -0,0 +1,169 @@
/**
* A simple sensing task that identifies the orientation of the device's screen
* and reports the accelerometer's values whenever the screen faces:
* - TOP
* - BOTTOM
* - LEFT
* - RIGHT
*/
import java.util.*;
import java.io.*;
import android.content.Context;
import android.hardware.*;
import android.util.*;
public class DemoOrientation implements SensorEventListener {
private static Context context;
private static int state;
List<Object> data;
private static SensorManager sensorManager;
// Save the last measurement outcome (do not report multiple TOPs).
private static String face;
public void onStart(Context c, ObjectInputStream s) throws Exception {
String TAG = getClass().getName() + "@onStart: ";
Log.wtf(TAG, "...");
context = c;
// Save a counter to debug the overall functionality of the framework.
if (s != null) {
state = (Integer) s.readObject();
} else {
state = 1;
}
data = new ArrayList<>();
// Monitor the accelerometer of the device.
sensorManager = (SensorManager) context.getSystemService(context.SENSOR_SERVICE);
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);
}
public boolean saveState(ObjectOutputStream s) throws Exception {
String TAG = getClass().getName() + "@saveState: ";
Log.wtf(TAG, "...");
s.writeObject(state);
return true;
}
public List<Object> getData() {
String TAG = getClass().getName() + "@getData: ";
Log.wtf(TAG, "...");
List<Object> l = data;
data = new ArrayList<>();
return l;
}
public void onStop() {
String TAG = getClass().getName() + "@onStop: ";
Log.wtf(TAG, "...");
sensorManager.unregisterListener(this);
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
}
// Called when sensor values have changed.
@Override
public void onSensorChanged(SensorEvent event) {
String TAG = getClass().getName() + "@onSensorChanged: ";
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
Map<String, Object> newData = new HashMap<>();
double[] values = new double[3];
values[0] = (double) event.values[0];
values[1] = (double) event.values[1];
values[2] = (double) event.values[2];
newData.put("sensor", event.sensor.getType());
// newData.put("timestamp", event.timestamp);
newData.put("timestamp", System.currentTimeMillis() * 1000000L);
newData.put("values", values);
// LEFT
if(x > 9 && y > 0 && y < 1 && z > 0 && z < 1) {
if(!"LEFT".equals(face)) {
Log.wtf(TAG, Integer.toString(state+1) + ". LEFT");
data.add(newData);
state++;
}
face = "LEFT";
// RIGHT
} else if(x < -9 && y > 0 && y < 1 && z > 0 && z < 1) {
if(!"RIGHT".equals(face)) {
Log.wtf(TAG, Integer.toString(state+1) + ". RIGHT");
data.add(newData);
state++;
}
face = "RIGHT";
// UP
} else if(z > 9.5) {
if(!"UP".equals(face)) {
Log.wtf(TAG, Integer.toString(state+1) + ". UP");
data.add(newData);
state++;
}
face = "UP";
// DOWN
} else if(z < -9.5) {
if(!"DOWN".equals(face)) {
Log.wtf(TAG, Integer.toString(state+1) + ". DOWN");
data.add(newData);
state++;
}
face = "DOWN";
}
}
}
}

119
Sensing/DemoTest.java Normal file
View File

@ -0,0 +1,119 @@
/**
* A dummy sensing task that logs the values of the accelerometer sensor of the
* device and reports the 100th value.
*/
import java.util.*;
import java.io.*;
import android.content.Context;
import android.hardware.*;
import android.util.*;
public class DemoTest implements SensorEventListener {
private static Context context;
private static int state;
List<Object> data;
private static SensorManager sensorManager;
private static String face;
public void onStart(Context c, ObjectInputStream s) throws Exception {
String TAG = getClass().getName() + "@onStart: ";
Log.wtf(TAG, "...");
context = c;
if (s != null) {
state = (Integer) s.readObject();
} else {
state = 1;
}
data = new ArrayList<>();
sensorManager = (SensorManager) context.getSystemService(context.SENSOR_SERVICE);
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);
}
public boolean saveState(ObjectOutputStream s) throws Exception {
String TAG = getClass().getName() + "@saveState: ";
Log.wtf(TAG, "...");
s.writeObject(state);
return true;
}
public List<Object> getData() {
String TAG = getClass().getName() + "@getData: ";
Log.wtf(TAG, "...");
List<Object> l = data;
data = new ArrayList<>();
return l;
}
public void onStop() {
String TAG = getClass().getName() + "@onStop: ";
Log.wtf(TAG, "...");
sensorManager.unregisterListener(this);
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
}
// Called when sensor values have changed.
@Override
public void onSensorChanged(SensorEvent event) {
String TAG = getClass().getName() + "@onSensorChanged: ";
// Log.wtf(TAG, "...");
// We are interested only for the accelerometer values.
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
Map<String, Object> newData = new HashMap<>();
double[] values = new double[3];
values[0] = (double) event.values[0];
values[1] = (double) event.values[1];
values[2] = (double) event.values[2];
// Log only the 100th measurement.
if (state % 100 == 0) {
Log.wtf(TAG, Integer.toString(state) + ". DATA");
newData.put("sensor", event.sensor.getType());
// newData.put("timestamp", event.timestamp);
newData.put("timestamp", System.currentTimeMillis() * 1000000L);
newData.put("values", values);
data.add(newData);
}
state++;
}
}
}