Using Proximity Sensor to Control Screen with Android Code Example
public class MainActivity extends Activity implements SensorEventListener {
public static final String TAG = "SensorTest";
private SensorManager sensorManager;
private TextView tv;
private PowerManager localPowerManager = null; // **电源管理对象**
private WakeLock localWakeLock = null; // **电源锁**
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
tv = (TextView) findViewById(R.id.tv);
localPowerManager = (PowerManager) getSystemService(POWER_SERVICE);
// 获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是LogCat里用的Tag
localWakeLock = this.localPowerManager.newWakeLock(32, "hahaha"); // **电源锁级别**,日志tag
}
@Override
protected void onResume() {
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY), SensorManager.SENSOR_DELAY_UI);
super.onResume();
}
@Override
protected void onPause() {
sensorManager.unregisterListener(this);
super.onPause();
}
@Override
public void onSensorChanged(SensorEvent event) {
float[] values = event.values;
switch (event.sensor.getType()) {
case Sensor.TYPE_PROXIMITY:
tv.setText(values[0] + "");
if (values[0] == 0.0) { // **贴近手机**
Log.d(TAG, "hands up in calling activity");
if (!localWakeLock.isHeld()) {
localWakeLock.acquire(); // **申请设备电源锁**
}
} else { // **远离手机**
Log.d(TAG, "hands moved in calling activity");
if (localWakeLock.isHeld()) {
localWakeLock.setReferenceCounted(false);
localWakeLock.release(); // **释放设备电源锁**
}
}
break;
}
}
}
1.43MB
文件大小:
评论区