【发布时间】:2014-10-10 08:04:11
【问题描述】:
我在屏幕休眠后注册传感器。如果设备检测到抖动事件,我必须唤醒屏幕。 如果我将设备与系统连接,设备会正确唤醒。 如果我断开设备, moto g 设备,chroma 数位板无法唤醒。但是三星设备会唤醒。
所以我已经通过在 textview 中显示 logcat 值进行了测试。 我发现了以下问题: 有时屏幕关闭后,我没有收到广播消息。 有时我会收到消息,但摇动设备后 maccel 值也没有增加。
我正在使用以下代码:
初始化传感器管理器:
manager=(SensorManager) getSystemService(Context.SENSOR_SERVICE);
sensor=manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
注册广播接收器:
registerReceiver(screenoffreceiver, new IntentFilter(Intent.ACTION_SCREEN_OFF));
广播接收器:
private BroadcastReceiver screenoffreceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Bundle extras = intent.getExtras();
if (Intent.ACTION_SCREEN_OFF.equalsIgnoreCase(intent.getAction())) {
//screen has been switched off!
manager.registerListener(Testing.this, manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
}
}
};
检测抖动事件:
public void onSensorChanged(SensorEvent event) {
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
mAccelLast = mAccelCurrent;
mAccelCurrent = (float) Math.sqrt((double) (x*x + y*y + z*z));
float delta = mAccelCurrent - mAccelLast;
mAccel = mAccel * 0.9f + delta; // perform low-cut filter
Log.i("mAccel", "mAccel "+mAccel);
mytext.setText(mytext.getText().toString()+" "+mAccel);
if(mAccel>=1) {
unlock_screen();
}
请帮我解决这些问题。
【问题讨论】: