使用简介
第一步,获取传感器的SensorManager实例
SensorManager sensorManager= (SensorManager) getSystemService(Context.SENSOR_SERVICE);
第二步,调用相应的传感器类型
Sensor sensor=sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT)
第三步,我们需要借助SensorEventListener对传感器输出信号进行监控
private SensorEventListener listener=new SensorEventListener() {
public void onSensorChanged(SensorEvent event) {
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
- onSensorChanged(SensorEvent event)
- 这个方法参数是一个数据,所有的传感器输出信息都是存放在这个数组里面的
注册和取消注册传感器监听事件
- 注册的方法有三个参数
- 第一个参数为SensorEventListener的实例
- 第二个参数为Sensor的实例
- 第三个参数为传感器的更新速率,可选值有四个:SENSOR_DELAY_UI ,SENSOR_DELAY_NORMAL ,SENSOR_DELAY_GAME,SENSOR_DELAY_FASTEST,它们的更新速率依次递增的。
sensorManager.registerListener(listener,sensor,SensorManager.SENSOR_DELAY_NORMAL)
- 一般我们在onDestory方法中调用取消注册方法,释放资源
protected void onDestroy() {
super.onDestroy();
if (sensorManager!=null){
sensorManager.unregisterListener(listener);
}
}
光照传感器
public class MainActivity extends AppCompatActivity {
public SensorManager sensorManager;
private TextView textView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorManager= (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor sensor=sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
sensorManager.registerListener(listener,sensor,SensorManager.SENSOR_DELAY_NORMAL);
textView= (TextView) findViewById(R.id.textView);
}
private SensorEventListener listener=new SensorEventListener() {
public void onSensorChanged(SensorEvent event) {
textView.setText(event.values[0]+"");
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
@Override
protected void onDestroy() {
super.onDestroy();
if (sensorManager!=null){
sensorManager.unregisterListener(listener);
}
}
}
加速度传感器
public class MainActivity extends AppCompatActivity {
private SensorManager sensorManager;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorManager= (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor sensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(listener,sensor,SensorManager.SENSOR_DELAY_NORMAL);
}
private SensorEventListener listener=new SensorEventListener() {
public void onSensorChanged(SensorEvent event) {
float x=Math.abs(event.values[0]);
float y=Math.abs(event.values[1]);
float z=Math.abs(event.values[2]);
if (x>15||y>15||z>15){
Toast.makeText(MainActivity.this, "摇一摇啊摇一摇", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
@Override
protected void onDestroy() {
super.onDestroy();
if (sensorManager!=null){
sensorManager.unregisterListener(listener);
}
}
}
- 由于传感器只能在真机上运行,所以这里就不再发效果图了,还请大家自行尝试效果。