传感器类型:方向、加速度(重力)、光线、磁场、距离(临近性)、温度等。 方向传感器: Sensor.TYPE_ORIENTATION 加速度(重力)传感器: Sensor.TYPE_ACCELEROMETER 光线传感器: Sensor.TYPE_LIGHT 磁场传感器: Sensor.TYPE_MAGNETIC_FIELD 距离(临近性)传感器: Sensor.TYPE_PROXIMITY 温度传感器: Sensor.TYPE_TEMPERATURE
//获取某种类型的感应器 Sensor sensor = sensorManager.getDefaultSensor( Sensor.TYPE_ACCELEROMETER); //注册监听,获取传感器变化值 sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME);
上面第三个参数为采样率:最快、游戏、普通、用户界面。当应用程序请求特定的采样率时,其实只是对传感器子系统的一个建议,不保证特定的采样率可用。 最快: SensorManager.SENSOR_DELAY_FASTEST 最低延迟,一般不是特别敏感的处理不推荐使用,该种模式可能造成手机电力大量消耗,由于传递的为原始数据,算法不处理好将会影响游戏逻辑和UI的性能。
游戏: SensorManager.SENSOR_DELAY_GAME 游戏延迟,一般绝大多数的实时性较高的游戏都使用该级别。
普通: SensorManager.SENSOR_DELAY_NORMAL
标准延迟,对于一般的益智类或EASY级别的游戏可以使用,但过低的采样率可能对一些赛车类游戏有跳帧现象。
用户界面: SensorManager.SENSOR_DELAY_UI 一般对于屏幕方向自动旋转使用,相对节省电能和逻辑处理,一般游戏开发中我们不使用。
------------------------------------------------------------------------------------------------
光传感器:
public class MainActivity extends Activity {
private MyListener listener ;
private SensorManager sensorManager ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main);
//得到系统传感器服务:传感器管理者
sensorManager =(android.hardware.SensorManager) getSystemService( SENSOR_SERVICE );
//获取谋者类类型的传感器
Sensor sensor = sensorManager .getDefaultSensor(Sensor. TYPE_LIGHT ); //获取光传感器
listener = new MyListener();
//注册监听器:获取传感器变化值 1.监听器对象 2.要检测的传感器对象 3.采样率
sensorManager .registerListener( listener , sensor, SensorManager . SENSOR_DELAY_GAME );
}
/**
* 监听器内部实现类
* @author Administrator
*
*/
private class MyListener implements SensorEventListener{
@Override
public void onSensorChanged(SensorEvent event) {
float [] values= event. values ;
System. out .println( "光信号强弱度:" +values[0]);
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
/**
* 当activity销毁时取消注册监听
*/
@Override
protected void onDestroy() {
super .onDestroy();
sensorManager .unregisterListener( listener );
listener = null ;
}
}
-------------------------------------------------------------------------------------------------
方向传感器:指南针
public class MainActivity extends Activity {
private MyListener listener ;
private SensorManager sensorManager ;
private ImageView iv ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
iv =(ImageView) findViewById(R.id. iv );
//得到系统传感器服务:传感器管理者
sensorManager =(android.hardware.SensorManager) getSystemService( SENSOR_SERVICE );
//获取谋者类类型的传感器
Sensor sensor = sensorManager .getDefaultSensor(Sensor.TYPE_ORIENTATION ); //获取方向传感器
listener = new MyListener();
//注册监听器:获取传感器变化值 1.监听器对象 2.要检测的传感器对象 3.采样率
sensorManager .registerListener( listener , sensor, SensorManager. SENSOR_DELAY_GAME );
}
/**
* 监听器内部实现类
* @author Administrator
*
*/
private class MyListener implements SensorEventListener{
//0:north, 90:east 180:south 270:west
float startAngle =0;
@Override
public void onSensorChanged(SensorEvent event) {
float [] values= event. values ;
System. out .println( "手机与正北方向的夹角:" +values[0]);
//创建旋转动画
RotateAnimation rotate= new RotateAnimation( startAngle ,values[0] ,RotateAnimation. RELATIVE_TO_SELF , 0.5f,
RotateAnimation. RELATIVE_TO_SELF , 0.5f);
rotate.setDuration(30);
iv .startAnimation(rotate);
startAngle =- values[0];
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
/**
* 当activity销毁时取消注册监听
*/
@Override
protected void onDestroy() {
super .onDestroy();
sensorManager .unregisterListener( listener );
listener = null ;
}
}