ALFA Dev工作室原创文章如转载,请注明:转载自博客原文地址:http://blog.csdn.net/kongre/article/details/6731129

每一部搭载Android智能操作系统的设备都具有一系列传感器的集合。其中最标准的两种传感器分别为Accelerometer Sensor(加速度计传感器)和Magnetometer Sensor(磁力计传感器)。当然Android设备当中还可能集中了其他类型的传感器,例如:Temperature Sensor(温度传感器),Proximity Sensor(距离临近传感器)等等其他类型的传感器。

一、Android 目前支持以下几种类型传感器:

二、怎么样获取当前设备某一特定类型传感器的列表(以Accelerometer Sensor为例)

public class SensorActivity extends Activity{
	private static final String TAG = "SensorActivity";
	//declare all ui widgets
	Button getSpecifiedSensorListBtn;
	
	private SensorManager sensorManager;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //create references to all ui widgets
        getSpecifiedSensorListBtn = (Button)findViewById(R.id.firstTest);
        //initialize the sensorManager
        sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        
        getSpecifiedSensorListBtn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				  List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
				  //iterate the sensor list
				  for(Sensor sensor : sensorList){
					  Log.d(TAG, "the name of the sensor:" + sensor.getName() + "\t type:" +
							  ((sensor.getType() == Sensor.TYPE_ACCELEROMETER) ? "ACCELEROMETER Sensor" :
							  				"Other Sensor"));
				  }
			}
		});
    }
}


控制台日志输出如下:

三、怎么样获取传感器当中的数据(例如:获取X,Y,Z轴的三个不同方向的加速度)

在介绍使用传感器事件监听器之前,我们先简单介绍一下SmartPhone的三维坐标系:

X-axis:水平方向的,正数值代表右边,负数值代表右边;

Y-axis:垂直方向的,正数值代表上边,负数值代表下边;

Z-axis:指向手机屏幕的前段界面的外边。


下面我们开始编写代码,获取不同方向的加速度的值:

public class SensorEventDemo extends Activity {
	private SensorManager sensorManager;
	//declare all ui widgets
	TextView tv;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.listen_accelerometer);
		//create all references to ui widgets
		tv= (TextView)findViewById(R.id.attitude);
		
		sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
	}
	
	private final SensorEventListener sensorEventListener = new SensorEventListener() {
		
		@Override
		public void onSensorChanged(SensorEvent event) {
			tv.setText("x轴加速度:" + event.values[0] + 
					"\ny轴加速度:" + event.values[1] + 
					"\nz轴加速度:" + event.values[2]
			);
		}
		
		@Override
		public void onAccuracyChanged(Sensor sensor, int accuracy) {
			
		}
	};
	
	@Override
	protected void onResume() {
		sensorManager.registerListener(sensorEventListener, 
												sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 
													SensorManager.SENSOR_DELAY_UI);
		super.onResume();
	}
	
	@Override
	protected void onPause() {
		sensorManager.unregisterListener(sensorEventListener);
		super.onPause();
	}
}


下面为真机运行显示结果:

最后如果你还是觉得我写的不够详细 看的不够爽 不要紧我把源代码的下载地址贴出来 欢迎大家一起讨论学习ALFA Dev工作室希望可以和大家一起进步。

下载地址:
http://download.csdn.net/source/3559419

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐