public void onSensorChanged(SensorEvent event) {
// values的第一个就是光感亮度的值
float values = event.values[0];
// 设置标志位
boolean temp = true;
// 如果光感值小于等于3则锁屏
if (values <= 3) {
Toast.makeText(MainActivity.this, "锁屏", Toast.LENGTH_LONG)
.show();
// systemLock();
temp = false;
}
// 如果temp为假并且光感值小于等于三则唤醒屏幕
if (!temp && values <= 3) {
// wakeUpAndUnlock();
Toast.makeText(MainActivity.this, "唤醒屏幕", Toast.LENGTH_LONG)
.show();
temp = true;
}
lightLevel.setText("当前的光感值为:" + values + "lux");
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}
/**************************我是分割线****************************/
// 锁屏
private void systemLock() {
if (this.policyManager.isAdminActive(this.componentName)) {
Window localWindow = getWindow();
WindowManager.LayoutParams localLayoutParams = localWindow
.getAttributes();
localLayoutParams.screenBrightness = 0.05F;
localWindow.setAttributes(localLayoutParams);
this.policyManager.lockNow();
}
finish();
}
// 唤醒屏幕
代码如上 1.差一个唤醒屏幕的方法 2.onSensorChanged(SensorEvent event)两个if都会执行 3.如何利用services让程序后台运行?
PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE); WakeLock wakeLock = pm.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "TAG"); wakeLock.acquire();
释放屏幕锁 KeyguardManager keyguardManager = (KeyguardManager) getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE); KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("TAG"); keyguardLock.disableKeyguard();
添加相应权限 <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
2.你的这部分貌似逻辑有问题,boolean temp = true;初始为true,但是第一个if的时候设为false,所以第二个if的时候每次都是false,也就是每次都会执行,然后又把temp设为true。不知道你需要达到什么样的效果,但是从代码上看,temp没有必要,直接把两个if合并,只判断光感值得效果和你现在的应该是一样的吧?如果你需要两个if根据temp值来执行相应的代码,是否需要把temp放在函数外面,避免每次都被初始化为true?
3.你可以做成服务,通过相应的广播来启动。