您的位置:首页 > 移动开发 > Android开发

Android学习之教你五步搞定Sensor,让程序更酷 !!

2012-06-05 14:27 155 查看
首先介绍下,啥叫传感器。

Sensor(传感器):维基百科告诉我:传感器是接收信号或刺激并反应的器件,能将待测物理量或化学量转换成另一对应输出的装置。
比如:重力传感器,方向传感器
Android对每个设备的传感器都进行了抽象,SensorManger类用来控制传感器,Sensor用来描述具体的传感器,SensorEventListener用来监听传感器值的改变。
进入主题:
 
只需要五步,你就能搞定Sensor。让你的程序变的更酷。
 

[java]
view plaincopyprint?

//第一步:获得SensorManager对象,返回的就是一个硬件设备的控制器  
SensorManager sensorManager = (SensorManager)getSystemService(SERVICE_NAME);  
//第二步:获得特定的传感器  
Sensor accelerSensor = sensorManager.getDefaultSensor(Sensor. TYPE_ACCELEROMETER);  
//第三步:创建SensorEventListener监听传感器的值改变并且做出相应的动作  
SensorEventListener mySensorListener = new SensorEventListener() {  
 //传感器的值改变调用此方法  
        @Override  
        public void onSensorChanged(SensorEvent event) {  
            float x = event.values[0];  
            float y = event.values[1];  
            float z = event.values[2];         
            //获得值之后,你就可以进行相应的处理啦  
            System.out.println("~~~X is :"+x);  
            System.out.println("---Y is :"+y);  
            System.out.println("+++Z is :"+z);  
        }  
        //传感器的精确度改变调用此方法  
        @Override  
        public void onAccuracyChanged(Sensor sensor, int accuracy) {  
        }  
}  
//第四步:注册传感器事件监听事件  
     sensorManager.registerListener(mySensorListener, accelerSensor, SensorManager.SENSOR_DELAY_NORMAL);  
//第五步:注销传感器事件的监听  
     sensorManager.unregisterListener(mySensorListener);  

//第一步:获得SensorManager对象,返回的就是一个硬件设备的控制器SensorManager sensorManager = (SensorManager)getSystemService(SERVICE_NAME);//第二步:获得特定的传感器Sensor accelerSensor = sensorManager.getDefaultSensor(Sensor. TYPE_ACCELEROMETER);//第三步:创建SensorEventListener监听传感器的值改变并且做出相应的动作SensorEventListener mySensorListener = new SensorEventListener() { //传感器的值改变调用此方法 @Override public void onSensorChanged(SensorEvent event) { float x = event.values[0]; float y = event.values[1]; float z = event.values[2]; //获得值之后,你就可以进行相应的处理啦 System.out.println("~~~X is :"+x); System.out.println("---Y is :"+y); System.out.println("+++Z is :"+z); } //传感器的精确度改变调用此方法 @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { }}//第四步:注册传感器事件监听事件 sensorManager.registerListener(mySensorListener, accelerSensor, SensorManager.SENSOR_DELAY_NORMAL);//第五步:注销传感器事件的监听 sensorManager.unregisterListener(mySensorListener); 
补充:

 

第二步中可以获得如下传感器,
 
传感器类型列表:
Sensor.TYPE_ACCELEROMETER:

         加速计传感器

Sensor.TYPE_GYROSCOPE:

         回转仪传感器

Sensor.TYPE_LIGHT:

         光传感器,动态控制屏幕亮度

Sensor.TYPE_MAGNETIC_FIELD:

         磁场传感器

Sensor.TYPE_ORIENTATION:

         方向传感器

Sensor.TYPE_PRESSURE:

        压力传感器

Sensor.TYPE_PROXIMIY:

         邻近距离传感器

Sensor.TYPE_TEMPERATURE:

         温度传感器

 
有些手机不支持部分感应装置你可以判断sensor是否为null,为null时你可以提示用户。

你也可以使用下面的语句获得设备可用的的传感器列表:
List<Sensor> allSensors = sensorManger.getSensorList(Sensor.TYPE_ALL);
 
在第三步中,
    三个参数分别为:SensorEventListener、Sensor、传感器的更新速率
 
前两个参数都是之前声明的。
 

第三个参数,有四个选择。

传感器更新速率:

SensorManager.SENSOR_DELAY_FASTEST:

         指定可能最快的传感器更新速率

 

SensorManager.SENSOR_DELAY_GAME:

         指定适合在游戏中使用的更新速率

 

SensorManager.SENSOR_DELAY_NORMAL:

         指定默认的更新速率

 

SensorManager.SENSOR_DELAY_UI:

         指定适合于更新UI的更新速率

 

 

第四步一般是在onResume()中进行。

 

第五步一般在onPause()中进行。

这样Activity是和用户交互时才使用它们。

 

我写了一个方向传感器的简单例子,有兴趣的同学可以下载:

http://download.csdn.net/source/3326822

 

就这样你就可以进入Android的Sensor世界了,在接下来的文章中,我会结合游戏和实例来详细介绍部分传感器。

时候也不早了,今天就到这里了,谢谢大家。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息