这是我的代码,复制并粘贴其他主题关于解锁一个Android .. 我不知道为什么这不起作用! :(
目标是:当接近传感器为HI时,设备自行解锁。
(更多信息:Using proximity sensor lock and unlock a home screen)
传感器工作正常,但手机仍然锁定:(
我没有pin锁或其他,我在nexus 5上部署。
private SensorManager mSensorManager;
private Sensor ProxymitySensor ;
private ToneGenerator tg = new ToneGenerator(AudioManager.STREAM_NOTIFICATION, 100);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_unlock);
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
ProxymitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
mSensorManager.registerListener(this, ProxymitySensor,SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.unlock, menu);
return true;
}
@Override
public final void onSensorChanged(SensorEvent event) {
Object sensordata = event.values[0];
// Do something with this sensor data.
if (event.values[0] == event.sensor.getMaximumRange()){
PlaySound();
UnlockMe();
}
}
private void PlaySound() {
tg.startTone(ToneGenerator.TONE_PROP_BEEP);
}
private void UnlockMe(){
// try to unlock the phone
getWindow().addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
getWindow().addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(LayoutParams.FLAG_TURN_SCREEN_ON);
// nothing happen :(
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}
这里是完整的文件:http://pastebin.com/CCv2W70Y
我的fone已被锁定,如果我把手放在上面,我会听到哔哔声,仅此而已:( LocgCat不说anityng ...
任何想法?
答案 0 :(得分:4)
你错过了全屏旗帜。
来自Google的文档:
public static final int FLAG_SHOW_WHEN_LOCKED
窗口标志:屏幕锁定时显示窗口的特殊标志。这将使应用程序窗口优先于密钥保护或任何其他锁定屏幕。可以与FLAG_KEEP_SCREEN_ON一起使用,在显示键保护窗口之前直接打开屏幕并显示窗口。可与FLAG_DISMISS_KEYGUARD一起使用,以自动完全取消非安全密钥保护。 此标志仅适用于最顶层的全屏窗口。
强调我的。