Android应用开发揭秘(笔记) 第九章Android特色开发

☆ 传感器:
Android中支持的几种传感器:
Sensor.TYPE_ACCELEROMETER:加速传感器
Sensor.TYPE_GYROSCOPE:陀螺仪传感器
Sensor.TYPE_LIGHT:亮度传感器
Sensor.TYPE_MAGNETIC_FIFLD:地磁传感器
Sensor.TYPE_ORIENTATION:方向传感器
Sensor.TYPE_PRESSURE:压力传感器
Sensor.TYPE_PROXIMITY:进程传感器

要在Android中使用传感器,首先需要了解SensorManager和SensorEventListener。

1. SensorManager是所有传感器的一个综合管理类,包括了传感器的种类、采样率、景区度等。通过getSystemService方法来获取一个SensorManager对象。
代码如下:
SensorManager mSensorManager = (SensorManager)getSystemService( SENSOR_SERVICE );
取得SensorManager对象之后,可以通过getSensorList方法来获得我们需要的传感器类型,保存到一个传感器列表中。
List<Sensor> sensors = mSensorManager.getSensorList( Sensor.TYPE_ORIENTATION );
要与传奇交互,应用程序必须注册一监听与一个或者多个传感器相关的活动。Android中提供而来registerListener来注册一个传感器,并提供unregisterListener来卸载一个传感器。
registerListener方法包括3个参数:第1个参数,接受信号的Listener实例;第2个参数,想接收的传感器类型的列表;第3个参数,接受频度。调用之后返回一个boolean值。
//注册传感器
Boolean mRegisteredSensor = mSensorManager.registerListener( this, sensors, SensorManager.SENSOR_DELAY_FASTEST );
//卸载传感器
mSensorManager.unregisteren(this);

2. SensorEventListener是使用传感器的核心部分,以下两个方法必须实现。
onSensorChanged( SensorEvent evnet )方法在传感器值更改时调用。该方法只由受此应用程序监视的传感器调用。该方法的参数包括了一个SensorEvent对象,该对象主要包括一组
浮点数,表示传感器的方向、加速度等信息。
float x = event.values[SensorManager.DATA_X];
float y = event.values[SensorManager.DATA_Y];
float z = event.values[SensorManager.DATA_Z];

onAccuracyChanged( Sensor sensor, int accuracy )方法在传感器的精度发生改变时调用。其参数包括两个整数:一个表示传感器,另一个表示传感器新的准确值。
代码如下:

private boolean mRegisteredSensor;
//定义SensorManager
private SensorManager mSensorManager;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

mRegisteredSensor = false;
//取得SensorManager实例
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
}
@Override
protected void onResume()
{
super.onResume();

//接受SensorManager的一个列表(Listener)
//这里我们指定类型为TYPE_ORIENTATION(方向感应器)
List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ORIENTATION);

if (sensors.size() > 0)
{
Sensor sensor = sensors.get(0);
//注册SensorManager
//this->接收sensor的实例
//接收传感器类型的列表
//接受的频率
mRegisteredSensor = mSensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_FASTEST);
}
}
@Override
protected void onPause()
{
if (mRegisteredSensor)
{
//如果调用了registerListener
//这里我们需要unregisterListener来卸载\取消注册
mSensorManager.unregisterListener(this);
mRegisteredSensor = false;
}
super.onPause();
}
//当进准度发生改变时
//sensor->传感器
//accuracy->精准度
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy)
{

}
// 当传感器在被改变时触发
@Override
public void onSensorChanged(SensorEvent event)
{
// 接受方向感应器的类型
if (event.sensor.getType() == Sensor.TYPE_ORIENTATION)
{
//这里我们可以得到数据,然后根据需要来处理
//由于模拟器上面无法测试效果,因此我们暂时不处理数据
float x = event.values[SensorManager.DATA_X];
float y = event.values[SensorManager.DATA_Y];
float z = event.values[SensorManager.DATA_Z];
}
}


你可能感兴趣的:(Android应用开发揭秘(笔记) 第九章Android特色开发)