Initial Commit - Fixing Accelerometer

This commit is contained in:
Joe Bowser 2010-04-28 15:46:15 -07:00
parent 36e90c9e22
commit 64671184a6
4 changed files with 77 additions and 29 deletions

View File

@ -4,20 +4,11 @@ function Acceleration(x, y, z)
this.y = y; this.y = y;
this.z = z; this.z = z;
this.timestamp = new Date().getTime(); this.timestamp = new Date().getTime();
this.win = null;
this.fail = null;
} }
// Need to define these for android var accelListeners = [];
_accel = {};
_accel.x = 0;
_accel.y = 0;
_accel.z = 0;
function gotAccel(x, y, z)
{
_accel.x = x;
_accel.y = y;
_accel.z = z;
}
/** /**
* This class provides access to device accelerometer data. * This class provides access to device accelerometer data.
@ -45,12 +36,29 @@ Accelerometer.prototype.getCurrentAcceleration = function(successCallback, error
// Created for iPhone, Iphone passes back _accel obj litteral // Created for iPhone, Iphone passes back _accel obj litteral
if (typeof successCallback == "function") { if (typeof successCallback == "function") {
var accel = new Acceleration(_accel.x,_accel.y,_accel.z); if(this.lastAcceleration)
Accelerometer.lastAcceleration = accel; successCallback(accel);
successCallback(accel);
} }
} }
Accelerometer.prototype.gotAccel = function(key, x, y, z)
{
var a = Acceleration(x,y,z);
a.x = x;
a.y = y;
a.x = z;
a.win = accelListener[key].win;
a.fail = accelListener[key].fail;
this.timestamp = new Date().getTime();
this.lastAcceleration = a;
accelListener[key] = a;
if (typeof a.win == "function") {
a.win(a);
}
}
/** /**
* Asynchronously aquires the acceleration repeatedly at a given interval. * Asynchronously aquires the acceleration repeatedly at a given interval.
* @param {Function} successCallback The function to call each time the acceleration * @param {Function} successCallback The function to call each time the acceleration
@ -64,11 +72,12 @@ Accelerometer.prototype.getCurrentAcceleration = function(successCallback, error
Accelerometer.prototype.watchAcceleration = function(successCallback, errorCallback, options) { Accelerometer.prototype.watchAcceleration = function(successCallback, errorCallback, options) {
// TODO: add the interval id to a list so we can clear all watches // TODO: add the interval id to a list so we can clear all watches
var frequency = (options != undefined)? options.frequency : 10000; var frequency = (options != undefined)? options.frequency : 10000;
var accel = Acceleration(0,0,0);
Accel.start(frequency); accel.win = successCallback;
return setInterval(function() { accel.fail = errorCallback;
navigator.accelerometer.getCurrentAcceleration(successCallback, errorCallback, options); accel.opts = options;
}, frequency); var key = accelListeners.push( accel ) - 1;
Accel.start(frequency, key);
} }
/** /**
@ -76,8 +85,11 @@ Accelerometer.prototype.watchAcceleration = function(successCallback, errorCallb
* @param {String} watchId The ID of the watch returned from #watchAcceleration. * @param {String} watchId The ID of the watch returned from #watchAcceleration.
*/ */
Accelerometer.prototype.clearWatch = function(watchId) { Accelerometer.prototype.clearWatch = function(watchId) {
Accel.stop(); Accel.stop(watchId);
clearInterval(watchId); }
Accelerometer.prototype.epicFail = function(watchId, message) {
accelWatcher[key].fail();
} }
PhoneGap.addConstructor(function() { PhoneGap.addConstructor(function() {

View File

@ -0,0 +1,33 @@
package com.phonegap;
import java.util.HashMap;
import android.content.Context;
import android.webkit.WebView;
public class AccelBroker {
private WebView mAppView;
private Context mCtx;
private HashMap<String, AccelListener> accelListeners;
public AccelBroker(WebView view, Context ctx)
{
mCtx = ctx;
mAppView = view;
accelListeners = new HashMap<String, AccelListener>();
}
public String start(int freq, String key)
{
AccelListener listener = new AccelListener(key, freq, mCtx, mAppView);
accelListeners.put(key, listener);
return key;
}
public void stop(String key)
{
AccelListener acc = accelListeners.get(key);
acc.stop();
}
}

View File

@ -15,7 +15,7 @@ public class AccelListener implements SensorEventListener{
WebView mAppView; WebView mAppView;
Context mCtx; Context mCtx;
String mKey; String mKey;
Sensor mSensor; Sensor mSensor;
int mTime = 10000; int mTime = 10000;
boolean started = false; boolean started = false;
@ -23,10 +23,12 @@ public class AccelListener implements SensorEventListener{
private long lastUpdate = -1; private long lastUpdate = -1;
public AccelListener(Context ctx, WebView appView) public AccelListener(String key, int freq, Context ctx, WebView appView)
{ {
mCtx = ctx; mCtx = ctx;
mAppView = appView; mAppView = appView;
mKey = key;
mTime = freq;
sensorManager = (SensorManager) mCtx.getSystemService(Context.SENSOR_SERVICE); sensorManager = (SensorManager) mCtx.getSystemService(Context.SENSOR_SERVICE);
} }
@ -42,7 +44,7 @@ public class AccelListener implements SensorEventListener{
} }
else else
{ {
// Call fail mAppView.loadUrl("javascript:navigator.accelerometer.epicFail(" + mKey + ", 'Failed to start')");
} }
} }
@ -68,8 +70,9 @@ public class AccelListener implements SensorEventListener{
float x = event.values[0]; float x = event.values[0];
float y = event.values[1]; float y = event.values[1];
float z = event.values[2]; float z = event.values[2];
mAppView.loadUrl("javascript:gotAccel(" + x + ", " + y + "," + z + " )"); //mAppView.loadUrl("javascript:gotAccel(" + x + ", " + y + "," + z + " )");
mAppView.loadUrl("javascript:navigator.accelerometer.gotAccel(" + mKey + "," + x + "," + y + "," + z + ")");
} }
} }

View File

@ -55,7 +55,7 @@ public class DroidGap extends Activity {
private PhoneGap gap; private PhoneGap gap;
private GeoBroker geo; private GeoBroker geo;
private AccelListener accel; private AccelBroker accel;
private CameraLauncher launcher; private CameraLauncher launcher;
private ContactManager mContacts; private ContactManager mContacts;
private FileUtils fs; private FileUtils fs;
@ -135,7 +135,7 @@ public class DroidGap extends Activity {
{ {
gap = new PhoneGap(this, appView); gap = new PhoneGap(this, appView);
geo = new GeoBroker(appView, this); geo = new GeoBroker(appView, this);
accel = new AccelListener(this, appView); accel = new AccelBroker(appView, this);
launcher = new CameraLauncher(appView, this); launcher = new CameraLauncher(appView, this);
mContacts = new ContactManager(this, appView); mContacts = new ContactManager(this, appView);
fs = new FileUtils(appView); fs = new FileUtils(appView);