`
QCheng5453
  • 浏览: 15887 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

传感器的应用开发

阅读更多

传感器的应用开发

 

先贴几个地址

http://www.oschina.net/question/163910_28354这里面介绍了11中传感器。

http://www.oschina.net/question/12_1593 这里面比较详细的介绍了如何使用传感器。


我们都知道智能机中都含有或多或少的传感器,比较常见的是加速度传感器,姿态传感器,重力传感器等等。

我们需要为手机进行有关传感器方面的额编程,首先就是要获得各种传感器采样得到的数值。

Android系统中每当某个传感器的数值发生了变化,就会相应产生一个事件,这样,我们就可以实现一个监听器,从而对事件进行操作。


    1、首先利用getSystemService这个函数获取一个SensorManager的对象,该对象用于对应于传感器的管理类,可以理解成所有传感器的集合。


    2、之后再使用SensorManager的getDefaultSensor方法获取一个具体的Sensor对象。(比如说加速度传感器,重力传感器等等)


    3、注册传感器的监听器。


    4、取消注册传感器监听器。


下面的代码尝试获得手机所处环境的总加速度。

 

 

public class TempTest_sensorActivity extends Activity {
	
	private SensorManager sensormanager;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        sensormanager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); //获取传感器服务需要向下转型
        
        Sensor sensor = sensormanager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);  //获取加速度传感器

//下面注册监听器,第一个参数是监听器对象,第二个参数是需要监听的传感器对象,第三个表示传感器的采样率(一个int型)。        
        sensormanager.registerListener(new SensorEventListener() {
			
			@Override
			public void onSensorChanged(SensorEvent event) {
				float x = event.values[0];  //values[o]表示x方向的加速度大小
				float y = event.values[1];  //values[1]表示y方向的加速度大小
				float z = event.values[2];  //values[2]表示z方向的加速度大小
				double xyz = Math.sqrt(x*x+y*y+z*z);  //算出总的加速度大小
				System.out.println("a = "+xyz);
			}
			@Override
			public void onAccuracyChanged(Sensor sensor, int accuracy) {  //传感器准确度变化时的回调函数,一般没什么用..
			}
		}, sensor, SensorManager.SENSOR_DELAY_NORMAL);
    }
    
}

 

 

上面注册监听器时最后一个参数表示传感器的采样率,即多少时间间隔系统对该传感器进行一次采样。

对于values,该变量在不同的传感器中有这不同的含义,可以查看Android参考文档进行参考。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics