我在写代码碰到这个地方了:
首先获取SensorManager对象
SensorManager
sensorManager
=
(
SensorManager
)
getSystemService
(
SENSOR_SERVICE
);
然后获取Sensor对象
Sensor
lightSensor
=
sensorManager
.
getDefaultSensor
(
Sensor
.
TYPE_LIGHT
);
Sensor
proximitySensor
=
sensorManager
.
getDefaultSensor
(
Sensor
.
TYPE_PROXIMITY
);
Sensor
上面这两行就是获取光线和距离传感器的方法。
好了~既然得到传感器,现在就是获取值了~
先获取传感器的监听器~
private
SensorEventListener
sensorEventListener
=
new
SensorEventListener
()
{
@Override
public
void
onSensorChanged
(
SensorEvent
sensorEvent
)
{
if
(
sensorEvent
.
sensor
.
getType
()
==
Sensor
.
TYPE_LIGHT
){
sensorLightValue
=
sensorEvent
.
values
[
0
];
}
else
if
(
sensorEvent
.
sensor
.
getType
()
==
Sensor
.
TYPE_PROXIMITY
){
sensorProximityValue
=
sensorEvent
.
values
[
0
];
}
}
@Override
public
void
onAccuracyChanged
(
Sensor
sensor
,
int
i
)
{
}
};
};
在SensorEventListener里一共有两个方法,第一个是onSensorChanged在传感器获得的数值改变的时候调用。
第二个是onAccuracyChanged是在精度值改变的时候调用~(一般用不到这个方法)
然后注册监听器~
sensorManager
.
registerListener
(
sensorEventListener
,
lightSensor
,
SensorManager
.
SENSOR_DELAY_NORMAL
);
sensorManager . registerListener ( sensorEventListener , proximitySensor , SensorManager . SENSOR_DELAY_NORMAL );
sensorManager . registerListener ( sensorEventListener , proximitySensor , SensorManager . SENSOR_DELAY_NORMAL );
在这里,registerListener的方法里,第一个参数是SensorEventListener的接口对象,第二个是传感器对象,第三个是获取数据的频率~
大致就这么多~我要弄明白下多线程的并发和锁机制~弄好了再添加~