Android的常用传感器

Android的常用传感器

Android有哪些常用的传感器,之前还真的完全不清楚,指南针我就在手机见过,用的应该是方向传感器,其实Android提供的传感器有以下几种:

1.方向传感器Orientation

2.磁场传感器Megnetic Field

3.温度传感器Temperature

4.光传感器Light

5.压力传感器Pressure

 

 

 

下面一个简单的实例来介绍这些传感器用法:

创建项目:SensorSimulatorTest

项目运行结果:

 

以上是利用传感器模拟器所产生的结果

关于传感器模拟器SensorSimulator需要登录http://code.googel.com/p/openintents/wiki/SensorSimulator站点,下载SensorSimulator的最新版本。

我下载的最新版本是:2.0-rc1.

关于这个模拟器的使用就不再介绍,具体的请参考:疯狂Android讲义第15章传感器应用开发

下载的文件目录下bin包含该工具的PC端程序和手机端程序

PC端:

 

手机端:

        

 

 

关键代码:

package org.wwj.sensor;

import org.openintents.sensorsimulator.hardware.Sensor;
import org.openintents.sensorsimulator.hardware.SensorEvent;
import org.openintents.sensorsimulator.hardware.SensorEventListener;
import org.openintents.sensorsimulator.hardware.SensorManagerSimulator;

import android.app.Activity;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.EditText;

public class SensorSimulatorTest extends Activity implements SensorEventListener{
	
//	//定义真机的Sensor管理器
	//private SensorManager mSensorManager;
	//定义模拟器的Sensor管理器
	private SensorManagerSimulator mSensorManager;
	EditText etOrientation;
	EditText etMagnetic;
	EditText etTemerature;
	EditText etLight;
	EditText etPressure;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //获取界面上的EditText组件
        etOrientation = (EditText) findViewById(R.id.etOrientation);
        etMagnetic = (EditText) findViewById(R.id.etMagnetic);
        etTemerature = (EditText) findViewById(R.id.etTemerature);
        etLight = (EditText) findViewById(R.id.etLight);
        etPressure = (EditText) findViewById(R.id.etPressure);
        //获取真机的传感器管理服务
        //mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
        //获取传感器模拟器的传感器管理服务
        mSensorManager = SensorManagerSimulator.getSystemService(this, SENSOR_SERVICE);
        //连接传感器模拟器
        mSensorManager.connectSimulator();
    }
    @Override
    	protected void onResume() {
    		// TODO Auto-generated method stub
    		super.onResume();
    		//为系统的方向传感器注册监听器
    		mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION)
    				, SensorManager.SENSOR_DELAY_GAME);
    		//为系统的磁场传感器注册监听器
    		mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD)
    				, SensorManager.SENSOR_DELAY_GAME);
    		//为系统的温度传感器注册监听器
    		mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE)
    				, SensorManager.SENSOR_DELAY_GAME);
    		//为系统的光传感器注册监听器
    		mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT)
    				, SensorManager.SENSOR_DELAY_GAME);
    		//为系统的压力传感器注册监听器
    		mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE)
    				, SensorManager.SENSOR_DELAY_GAME);
    	}
    @Override
    	protected void onStop() {
    		// TODO Auto-generated method stub
    		//程序退出时取消注册传感器监听器
    		mSensorManager.unregisterListener(this);
    		super.onStop();
    	}
    @Override
    	protected void onPause() {
    		// TODO Auto-generated method stub
    		//程序暂停时取消注册传感器监听器
    		mSensorManager.unregisterListener(this);
    		super.onPause();
    	}
    //当传感器精度改变时回调该方法
	public void onAccuracyChanged(Sensor arg0, int arg1) {
		// TODO Auto-generated method stub
		
	}

	public void onSensorChanged(SensorEvent event) {
		// TODO Auto-generated method stub
		float[] values = event.values;
		////真机上获取触发event的传感器类型
		//int sensorType = event.sensor.getType();
		//模拟器上获取触发event的传感器类型
		int sensorType = event.type;
		StringBuilder sb = null;
		//判断是哪个传感器发生改变
		switch(sensorType){
		//方向传感器
		case Sensor.TYPE_ORIENTATION:
			sb = new StringBuilder();
			sb.append("绕Z轴转过的角度: ");
			sb.append(values[0]);
			sb.append("\n绕X轴转过的角度: ");
			sb.append(values[1]);
			sb.append("\n绕Y周转过的角度: ");
			sb.append(values[2]);
			etOrientation.setText(sb.toString());
			break;
		case Sensor.TYPE_MAGNETIC_FIELD:
			sb = new StringBuilder();
			sb.append("X方向上的角度: ");
			sb.append(values[0]);
			sb.append("\nY方向上的角度: ");
			sb.append(values[1]);
			sb.append("\nZ方向上的角度: ");
			sb.append(values[2]);
			etMagnetic.setText(sb.toString());
			break;
		case Sensor.TYPE_TEMPERATURE:
			sb = new StringBuilder();
			sb.append("当前的温度是: ");
			sb.append(values[0]);
			etTemerature.setText(sb.toString());
			break;
		case Sensor.TYPE_PRESSURE:
			sb = new StringBuilder();
			sb.append("当前压力为: ");
			sb.append(values[0]);
			etPressure.setText(sb.toString());
			break;
		}
		
	}
}


 

	<!-- 通过模拟器调试需要访问网络 -->
 	<uses-permission android:name="android.permission.INTERNET"/>


 

 

posted on 2012-08-06 16:11  1.曲待续  阅读(249)  评论(0编辑  收藏  举报

导航