我已经在我的代码中成功配置了proximeter。现在我想以编程方式关闭和打开屏幕。传感器的代码工作正常,并且还调用了以下方法。
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
WakeLock screenWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"screenWakeLock");
if (event.values[0] == 0) {
screenWakeLock.acquire();
Log.e("onSensorChanged","NEAR");
} else {
if (screenWakeLock != null) {
if(screenWakeLock.isHeld())
screenWakeLock.release();
screenWakeLock = null;
}
Log.e("onSensorChanged","FAR");
}
}
我的问题是屏幕没有关闭。我还在代码中添加了所需的权限。还有什么原因???
检查为此代码提交的更改,https://github.com/jitsi/jitsi-android/compare/6d356fa637ae...7aba481d773f
getPowerManager().newWakeLock( 32, "proximity_off");
我了解wakelock
保持屏幕打开很有用。我没有成功地使用它打开和关闭屏幕。
因此,首先我将屏幕亮度调暗到尽可能低,然后使所有GUI元素都无法单击。这样我就解决了我的问题。
以下是方法:
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
WindowManager.LayoutParams params = this.getWindow().getAttributes();
if (event.values[0] == 0) {
//TODO Store original brightness value
params.screenBrightness = 0.004f;
this.getWindow().setAttributes(params);
enableDisableViewGroup((ViewGroup)findViewById(R.id.YOUR_MAIN_LAYOUT).getParent(),false);
Log.e("onSensorChanged","NEAR");
} else {
//TODO Store original brightness value
params.screenBrightness = -1.0f;
this.getWindow().setAttributes(params);
enableDisableViewGroup((ViewGroup)findViewById(R.id.YOUR_MAIN_LAYOUT).getParent(),true);
Log.e("onSensorChanged","FAR");
}
}
从这里开始,我参考了禁用整个屏幕视图的触摸。
试试这个快捷方式:
PowerManager manager = getPowerManager();
WakeLock lock = manager.newWakeLock( 32, "proximity_off");
lock.acquire();
上面的代码甚至不需要侦听接近传感器更改的事件。 32
用于Phone
和其他此类类似应用程序的InCallActivity
使用的隐藏WakeLock
字段。