/*
* Copyright (C) 2011 The Rexsee Open Source Project
*
* Licensed under the Rexsee License, Version 1.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.rexsee.com/CN/legal/license.html
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/


package rexsee.sensor;


import rexsee.core.browser.JavascriptInte**ce;
import rexsee.core.browser.RexseeBrowser;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;


public class RexseeSensorProximity implements JavascriptInte**ce {


private static final String INTE**CE_NAME = "Proximity";
@Override
public String getInte**ceName() {
return mBrowser.application.resources.prefix + INTE**CE_NAME;
}
@Override
public JavascriptInte**ce getInheritInte**ce(RexseeBrowser childBrowser) {
return this;
}
@Override
public JavascriptInte**ce getNewInte**ce(RexseeBrowser childBrowser) {
return new RexseeSensorProximity(childBrowser);
}


public static final String EVENT_ONPROXIMITYCHANGED = "onProximityChanged";


private final Context mContext;
private final RexseeBrowser mBrowser;
private final SensorManager mSensorManager;
private final SensorEventListener mSensorListener;
private final Sensor mSensor;


private int mRate = SensorManager.SENSOR_DELAY_NORMAL;
private int mCycle = 100; //milliseconds
private int mEventCycle = 100; //milliseconds
private float mAccuracy = 0;


private long lastUpdate = -1;
private long lastEvent = -1;


private float value = -999f;


public RexseeSensorProximity(RexseeBrowser browser) {
mContext = browser.getContext();
mBrowser = browser;
browser.eventList.add(EVENT_ONPROXIMITYCHANGED);


mSensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);


mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);


mSensorListener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() != Sensor.TYPE_PROXIMITY) return;
long curTime = System.currentTimeMillis();
if (lastUpdate == -1 || (curTime - lastUpdate) > mCycle) {
lastUpdate = curTime;
float lastValue = value;
value = event.values[SensorManager.DATA_X];
if (lastEvent == -1 || (curTime - lastEvent) > mEventCycle) {
if (Math.abs(value - lastValue) > mAccuracy) {
lastEvent = curTime;
mBrowser.eventList.run(EVENT_ONPROXIMITYCHANGED);
}
}
}
}
};


}


public String getLastKnownValue() {
return (value == -999) ? "null" : String.valueOf(value);
}


public void setRate(String rate) {
mRate = SensorRate.getInt(rate);
}
public String getRate() {
return SensorRate.getString(mRate);
}
public void setCycle(int milliseconds) {
mCycle = milliseconds;
}
public int getCycle() {
return mCycle;
}
public void setEventCycle(int milliseconds) {
mEventCycle = milliseconds;
}
public int getEventCycle() {
return mEventCycle;
}
public void setAccuracy(float value) {
mAccuracy = Math.abs(value);
}
public float getAccuracy() {
return mAccuracy;
}


public boolean isReady() {
return (mSensor == null) ? false : true;
}
public void start() {
if (isReady()) {
mSensorManager.registerListener(mSensorListener, mSensor, mRate);
} else {
mBrowser.exception(getInte**ceName(), "Proximity sensor is not found.");
}
}
public void stop() {
if (isReady()) {
mSensorManager.unregisterListener(mSensorListener);
}
}


}

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. 初学者如何画脚部?动漫人物脚部画法步骤
  2. 移动端布局思路与三种视口的关系 ,仿淘宝
  3. 移动端布局的基本思路
  4. php中文网布局实战
  5. 仿PHP中文网首页
  6. PHP中文网首页导航栏右侧布局
  7. 仿PHP中文网首页头部
  8. SEM工作的发展前景如何?还有‘钱’途吗?
  9. css-grid布局实战-选做作业
  10. js 垃圾回收机制