资讯详情

Android距离感应器P-Sensor浅析

将内容复制到剪贴板

代码:SensorEventListener mProximityListener = new SensorEventListener() {

public void onSensorChanged(SensorEvent event) {

long milliseconds = SystemClock.elapsedRealtime();

synchronized (mLocks) {

float distance = event.values[0];///检测手机与人体的距离

long timeSinceLastEvent = milliseconds - mLastProximityEventTime;///这次测试与上次测试的时差

mLastProximityEventTime = milliseconds;////更新上次测试的时间

mHandler.removeCallbacks(mProximityTask);

boolean proximityTaskQueued = false;

// compare against getMaximumRange to support sensors that only return 0 or 1

boolean active = (distance >= 0.0 && distance < PROXIMITY_THRESHOLD &&

distance < mProximitySensor.getMaximumRange());//如果距离小于一定距离阈值,默认为5.0f,说明手机和脸靠近,屏幕要熄灭。

if (mDebugProximitySensor) {

Slog.d(TAG, "mProximityListener.onSensorChanged active: " active);

}

if (timeSinceLastEvent < PROXIMITY_SENSOR_DELAY) {

// enforce delaying atleast PROXIMITY_SENSOR_DELAY before processing

mProximityPendingValue = (active ? 1 : 0);

mHandler.postDelayed(mProximityTask, PROXIMITY_SENSOR_DELAY - timeSinceLastEvent);

proximityTaskQueued = true;

} else {

// process the value immediately

mProximityPendingValue = -1;

proximityChangedLocked(active); ///熄灭屏幕操作

}

// update mProximityPartialLock state

boolean held = mProximityPartialLock.isHeld();

if (!held && proximityTaskQueued) {

// hold wakelock until mProximityTask runs

mProximityPartialLock.acquire();

} else if (held && !proximityTaskQueued) {

mProximityPartialLock.release();

}

}

}

public void onAccuracyChanged(Sensor sensor, int accuracy) {

// ignore

}

};

标签: 距离传感器会感应亮屏

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台