Android的常用传感器
16lz
2021-01-23
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 stubfloat[] 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"/>
更多相关文章
- [实战示例] 带您深入探讨 Android 传感器【附源码】
- android studio中光线传感器解析
- Android中传感器Sensor的使用
- Android学习 2 -建立模拟器
- Android笔记二十三.Android基于事件监听器处理机制
- CAMERA(12)---[Android相机]光线传感器识别环境光亮强度
- MonkeyRunner与模拟器连接