展会信息港展会大全

PhoneGap for Android平台源码
来源:互联网   发布日期:2016-01-14 12:34:11   浏览:1481次  

导读:对于初入Android开发的网友可以很好的了解代码规范,同时很多成熟的可复用代码希望对大家有帮助。PhoneGap内部数据传递使用了JSON,比如PhoneGap中指南针部分源码如下:public class CompassListener extends ......

对于初入Android开发的网友可以很好的了解代码规范,同时很多成熟的可复用代码希望对大家有帮助。PhoneGap内部数据传递使用了JSON,比如PhoneGap中指南针部分源码如下:

public class CompassListener extends Plugin implements SensorEventListener {

public static int STOPPED = 0;

public static int STARTING = 1;

public static int RUNNING = 2;

public static int ERROR_FAILED_TO_START = 3;

public long TIMEOUT = 30000;// Timeout in msec to shut off listener

int status;// status of listener

float heading;// most recent heading value

long timeStamp;// time of most recent value

long lastAccessTime;// time the value was last retrieved

private SensorManager sensorManager;// Sensor manager

Sensor mSensor;// Compass sensor returned by sensor manager

/**

* Constructor.

*/

public CompassListener() {

this.timeStamp = 0;

this.setStatus(CompassListener.STOPPED);

}

/**

* Sets the context of the Command. This can then be used to do things like

* get file paths associated with the Activity.

*

* @param ctx The context of the main Activity.

*/

public void setContext(PhonegapActivity ctx) {

super.setContext(ctx);

this.sensorManager = (SensorManager) ctx.getSystemService(Context.SENSOR_SERVICE);

}

/**

* Executes the request and returns PluginResult.

*

* @param actionThe action to execute.

* @param argsJSONArry of arguments for the plugin.

* @param callbackId The callback id used when calling back into JavaScript.

* @returnA PluginResult object with a status and message.

*/

public PluginResult execute(String action, JSONArray args, String callbackId) {

PluginResult.Status status = PluginResult.Status.OK;

String result = "";

try {

if (action.equals("start")) {

this.start();

}

else if (action.equals("stop")) {

this.stop();

}

else if (action.equals("getStatus")) {

int i = this.getStatus();

return new PluginResult(status, i);

}

else if (action.equals("getHeading")) {

// If not running, then this is an async call, so don't worry about waiting

if (this.status != RUNNING) {

int r = this.start();

if (r == ERROR_FAILED_TO_START) {

return new PluginResult(PluginResult.Status.IO_EXCEPTION, ERROR_FAILED_TO_START);

}

// Wait until running

long timeout = 2000;

while ((this.status == STARTING) && (timeout > 0)) {

timeout = timeout - 100;

try {

Thread.sleep(100);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

if (timeout == 0) {

return new PluginResult(PluginResult.Status.IO_EXCEPTION, AccelListener.ERROR_FAILED_TO_START);

}

}

float f = this.getHeading();

return new PluginResult(status, f);

}

else if (action.equals("setTimeout")) {

this.setTimeout(args.getLong(0));

}

else if (action.equals("getTimeout")) {

long l = this.getTimeout();

return new PluginResult(status, l);

}

return new PluginResult(status, result);

} catch (JSONException e) {

e.printStackTrace();

return new PluginResult(PluginResult.Status.JSON_EXCEPTION);

}

}

/**

* Identifies if action to be executed returns a value and should be run synchronously.

*

* @param action The action to execute

* @returnT=returns value

*/

public boolean isSynch(String action) {

if (action.equals("getStatus")) {

return true;

}

else if (action.equals("getHeading")) {

// Can only return value if RUNNING

if (this.status == RUNNING) {

return true;

}

}

else if (action.equals("getTimeout")) {

return true;

}

return false;

}

/**

* Called when listener is to be shut down and object is being destroyed.

*/

public void onDestroy() {

this.stop();

}

//--------------------------------------------------------------------------

// LOCAL METHODS

//--------------------------------------------------------------------------

/**

* Start listening for compass sensor.

*

* @returnstatus of listener

*/

public int start() {

// If already starting or running, then just return

if ((this.status == CompassListener.RUNNING) || (this.status == CompassListener.STARTING)) {

return this.status;

}

// Get accelerometer from sensor manager

List<Sensor> list = this.sensorManager.getSensorList(Sensor.TYPE_ORIENTATION);

// If found, then register as listener

if (list.size() > 0) {

this.mSensor = list.get(0);

this.sensorManager.registerListener(this, this.mSensor, SensorManager.SENSOR_DELAY_NORMAL);

this.lastAccessTime = System.currentTimeMillis();

this.setStatus(CompassListener.STARTING);

}

// If error, then set status to error

else {

this.setStatus(CompassListener.ERROR_FAILED_TO_START);

}

return this.status;

}

/**

* Stop listening to compass sensor.

*/

public void stop() {

if (this.status != CompassListener.STOPPED) {

this.sensorManager.unregisterListener(this);

}

this.setStatus(CompassListener.STOPPED);

}

public void onAccuracyChanged(Sensor sensor, int accuracy) {

// TODO Auto-generated method stub

}

/**

* Sensor listener event.

*

* @param SensorEvent event

*/

public void onSensorChanged(SensorEvent event) {

// We only care about the orientation as far as it refers to Magnetic North

float heading = event.values[0];

// Save heading

this.timeStamp = System.currentTimeMillis();

this.heading = heading;

this.setStatus(CompassListener.RUNNING);

// If heading hasn't been read for TIMEOUT time, then turn off compass sensor to save power

if ((this.timeStamp - this.lastAccessTime) > this.TIMEOUT) {

this.stop();

}

}

/**

* Get status of compass sensor.

*

* @returnstatus

*/

public int getStatus() {

return this.status;

}

/**

* Get the most recent compass heading.

*

* @returnheading

*/

public float getHeading() {

this.lastAccessTime = System.currentTimeMillis();

return this.heading;

}

/**

* Set the timeout to turn off compass sensor if getHeading() hasn't been called.

*

* @param timeoutTimeout in msec.

*/

public void setTimeout(long timeout) {

this.TIMEOUT = timeout;

}

/**

* Get the timeout to turn off compass sensor if getHeading() hasn't been called.

*

* @return timeout in msec

*/

public long getTimeout() {

return this.TIMEOUT;

}

/**

* Set the status and send it to JavaScript.

* @param status

*/

private void setStatus(int status) {

this.status = status;

}

}

赞助本站

人工智能实验室

相关热词: PhoneGap Android平台 源码

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港