Android传感器(四):距离传感器

2019-07-13 23:03发布

距离传感器应用之一通话时手机屏的亮灭 // 屏幕开关 private PowerManager localPowerManager = null;// 电源管理对象 private PowerManager.WakeLock localWakeLock = null;// 电源锁
  • 初始化对象和数据
setContentView(R.layout.activity_main); //初始化距离传感器 initSensor(this,Sensor.TYPE_PROXIMITY); setOnChangeListener(this); localPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); // 获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是LogCat里用的Tag localWakeLock = this.localPowerManager.newWakeLock(32, "MyPower");// 第一个参数为电源锁级别,第二个是日志tag
  • 主体:处理数据反馈
float[] its = event.values; //Log.d(TAG,"its array:"+its+"sensor type :"+event.sensor.getType()+" proximity type:"+Sensor.TYPE_PROXIMITY); if (its != null && event.sensor.getType() == Sensor.TYPE_PROXIMITY) { // System.out.println("its[0]:" + its[0]); // tv.setText(its[0]+""); //经过测试,当手贴近距离感应器的时候its[0]返回值为0.0,当手离开时返回1.0 if (its[0] == 0.0) {// 贴近手机 // System.out.println("hands up"); Log.d(TAG,"hands up in calling activity"); if (localWakeLock.isHeld()) { return; } else{ localWakeLock.acquire();// 申请设备电源锁 } } else {// 远离手机 System.out.println("hands moved"); Log.d(TAG,"hands moved in calling activity"); if (localWakeLock.isHeld()) { return; } else{ localWakeLock.setReferenceCounted(false); localWakeLock.release(); // 释放设备电源锁 } } }
  • 重点:销毁activity时需要释放电源锁,如果不释放,finish这个acitivity后仍然会有自动锁屏的效果,即使取消传感器监听,依然有锁频效果,没想明白
@Override public void onDestroy(){ super.onDestroy(); Log.d(TAG,"on destroy"); if(localWakeLock != null){ localWakeLock.release();//释放电源锁,如果不释放,finish这个acitivity后仍然会有自动锁屏的效果,不信可以试一试 } } Demo下载:gingerbread
相关链接:我的Android开发相关文章