您的位置:首页 > 其它

安卓开发中的重力感应传感器

2015-09-29 00:00 302 查看
安卓开发中拥有多种传感器,google提供了11种传感器供应用层使用:加速度、磁力、方向、陀螺仪、光线、压力(返回当前压强)、温度、接近(检测物体与手机的距离)、重力、线性加速度和旋转矢量。
在使用传感器之前,需要将工程中的类接口到SensorEventListener,接口后会有两个重载方法来进行监听,并取得感应检测Sensor状态。其中onAccuracyChanged()方法在感应检测到Sensor的精密度有变化时被调用,onSensorChanged()方法是在感应检测到Sensor的值有变化时被调用到。
工程建立后,声明SensorManager和Sensor两个对象,通过三条语句完成对传感器管理器,传感器以及传感器的注册的操作:
manager =(SensorManager)getSystemService(SENSOR_SERVICE);//获得传感器的服务。
sensor = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//获得加速度传感器服务
manager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_UI);//对传感器服务进行注册。
在传感器服务的注册方法中,有三个参数,三个参数分别为:监听sensor事件,Sensor目标种类,延迟时间的精度密度(包含FASTEST,GAME,UI,NORMAL四种情况,FASTEST太灵敏用不到,GAME主要用于游戏的开发,一般研发中使用UI和NORMAL)。完成了传感器服务的注册后,便可以进行感应数据的读取。
public void onSensorChanged(SensorEvent event)
{
mgx = event.values[SensorManager.DATA_X];
mgy = event.values[sensorManager.DATA_Y];
if(mgx<2&&mgx>-2&&mgxold<-2)
{WifiSend("1");}
else if(mgx<2&&mgx>-2&&mgxold>2)
{WifiSend("2");}
else if(mgy<2&&mgy>-2&&mgyold<-2)
{WifiSend("3");}
else if(mgy<2&&mgy>-2&&mgyold>2)
{WifiSend("4");}
mgxold = mgx; mgyold = mgy;
}
此段代码的作用是通过对比前后两次加速度传感器的数据,来判别手机转动的方式,然后对移动小车进行行进控制,达到重力感应控制小车的目的。

在使用完传感器之后,需要在工程对传感器服务进行注销,避免当Activity在后天运行时消耗手机电量。

SensorManager.unregisterListener(SensorEventListener, mSensor);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息