sjjg

 

综合示例,包含: //加速传感器 //重力传感器 //邻近传感器 //光线传感器

  1 import android.app.Activity;
  2 import android.hardware.Sensor;
  3 import android.hardware.SensorEvent;
  4 import android.hardware.SensorEventListener;
  5 import android.hardware.SensorManager;
  6 import android.os.Bundle;
  7 import android.util.Log;
  8 import android.widget.TextView;
  9 
 10 public class MotionSensorActivity extends Activity 
 11     //第1步, 实现传感器事件接口,其中的两个onSensorChanged和onAccuracyChanged
 12     implements SensorEventListener {
 13 
 14     //第2步, 准备相关成员变量
 15     private TextView tvAccelerometer;//用于显示结果
 16     private SensorManager mSensorManager;//管理motion senser
 17     private float gravity_X,gravity_Y,gravity_Z;//重力传感器返回的数据 分别代表x,y,z轴
 18 
 19     @Override
 20     protected void onCreate(Bundle savedInstanceState) {
 21         super.onCreate(savedInstanceState);
 22         setContentView(R.layout.activity_motion_sensor);
 23 
 24         tvAccelerometer = (TextView) findViewById(R.id.tvAccelerometer);
 25         
 26     //第3步, 得到SensorManager
 27         mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
 28 
 29     }
 30     //一般在当前窗口显示时老注意传感器广播接收器
 31     protected void onResume() {
 32         super.onResume();
 33         
 34     //第4步, 注册相关传感器
 35         //加速传感器
 36         Sensor accel = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
 37         //registerListener 第三个参数 有4个值,敏感度也不一样,0-3,低最敏感.SENSOR_DELAY_UI是2
 38         mSensorManager.registerListener(this,accel,SensorManager.SENSOR_DELAY_UI);
 39         
 40         //重力传感器
 41         Sensor gravity = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
 42         mSensorManager.registerListener(this,gravity,SensorManager.SENSOR_DELAY_FASTEST);
 43         
 44         //邻近传感器
 45         Sensor proximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
 46         mSensorManager.registerListener(this,proximity,SensorManager.SENSOR_DELAY_UI);
 47         
 48         //光线传感器
 49         Sensor light = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
 50         mSensorManager.registerListener(this,light,SensorManager.SENSOR_DELAY_UI);
 51     }
 52     //实现传感器事件接口 传感器感触到精确度变化.
 53     @Override
 54     public void onAccuracyChanged(Sensor sensor, int accuracy) {
 55 
 56     }
 57     //实现传感器事件接口 传感器感触到数据变化.
 58     @Override
 59     public void onSensorChanged(SensorEvent event) {
 60     //第5步, 处理传回来的数据
 61         switch (event.sensor.getType()) {
 62         case Sensor.TYPE_ACCELEROMETER: //加速度传感器
 63             final float alpha =  0.8f;
 64             gravity_X = alpha * gravity_X + (1 - alpha) * event.values[0];
 65             gravity_Y = alpha * gravity_Y + (1 - alpha) * event.values[1];
 66             gravity_Z = alpha * gravity_Z + (1 - alpha) * event.values[2];
 67 
 68             String accelerometer = "加速度\n" 
 69                     + "X:" + (event.values[0] - gravity_X) + "\n" 
 70                     + "Y:" + (event.values[1] - gravity_Y) + "\n" 
 71                     + "Z:" + (event.values[2] - gravity_Z);
 72             
 73             Log.d("z", String.valueOf(event.values[2] - gravity_Z));
 74             tvAccelerometer.setText(accelerometer);
 75             
 76             break;
 77         case Sensor.TYPE_GRAVITY://重力传感器
 78             gravity_X = event.values[0];
 79             gravity_Y = event.values[1];
 80             gravity_Z = event.values[2];
 81             break;
 82         case Sensor.TYPE_PROXIMITY://邻近传感器
 83             setTitle(String.valueOf(event.values[0]));
 84             break;
 85         case Sensor.TYPE_LIGHT:
 86             tvAccelerometer.append("\n"+event.values[0]+"\n");
 87             break;
 88         default:
 89             break;
 90         }
 91 
 92     }
 93     //一般在当前窗口关闭时取消注册.
 94     //第6步, 取消注册
 95     @Override
 96     protected void onPause() {
 97         super.onPause();
 98         mSensorManager.unregisterListener(this);
 99     }
100 }

 

import android.app.Activity;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.os.Bundle;import android.util.Log;import android.widget.TextView;
public class MotionSensorActivity extends Activity //第1步, 实现传感器事件接口,其中的两个onSensorChanged和onAccuracyChangedimplements SensorEventListener {
//第2步, 准备相关成员变量private TextView tvAccelerometer;//用于显示结果private SensorManager mSensorManager;//管理motion senserprivate float gravity_X,gravity_Y,gravity_Z;//重力传感器返回的数据 分别代表x,y,z轴
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_motion_sensor);
tvAccelerometer = (TextView) findViewById(R.id.tvAccelerometer);//第3步, 得到SensorManagermSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
}//一般在当前窗口显示时老注意传感器广播接收器protected void onResume() {super.onResume();//第4步, 注册相关传感器//加速传感器Sensor accel = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//registerListener 第三个参数 有4个值,敏感度也不一样,0-3,低最敏感.SENSOR_DELAY_UI是2mSensorManager.registerListener(this,accel,SensorManager.SENSOR_DELAY_UI);//重力传感器Sensor gravity = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);mSensorManager.registerListener(this,gravity,SensorManager.SENSOR_DELAY_FASTEST);//邻近传感器Sensor proximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);mSensorManager.registerListener(this,proximity,SensorManager.SENSOR_DELAY_UI);//光线传感器Sensor light = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);mSensorManager.registerListener(this,light,SensorManager.SENSOR_DELAY_UI);}//实现传感器事件接口 传感器感触到精确度变化.@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {
}//实现传感器事件接口 传感器感触到数据变化.@Overridepublic void onSensorChanged(SensorEvent event) {//第5步, 处理传回来的数据switch (event.sensor.getType()) {case Sensor.TYPE_ACCELEROMETER: //加速度传感器final float alpha =  0.8f;gravity_X = alpha * gravity_X + (1 - alpha) * event.values[0];gravity_Y = alpha * gravity_Y + (1 - alpha) * event.values[1];gravity_Z = alpha * gravity_Z + (1 - alpha) * event.values[2];
String accelerometer = "加速度\n" + "X:" + (event.values[0] - gravity_X) + "\n" + "Y:" + (event.values[1] - gravity_Y) + "\n" + "Z:" + (event.values[2] - gravity_Z);Log.d("z", String.valueOf(event.values[2] - gravity_Z));tvAccelerometer.setText(accelerometer);break;case Sensor.TYPE_GRAVITY://重力传感器gravity_X = event.values[0];gravity_Y = event.values[1];gravity_Z = event.values[2];break;case Sensor.TYPE_PROXIMITY://邻近传感器setTitle(String.valueOf(event.values[0]));break;case Sensor.TYPE_LIGHT:tvAccelerometer.append("\n"+event.values[0]+"\n");break;default:break;}
}//一般在当前窗口关闭时取消注册.//第6步, 取消注册@Overrideprotected void onPause() {super.onPause();mSensorManager.unregisterListener(this);}}

分类:

技术点:

相关文章: