我在屏幕睡眠後註冊傳感器。如果設備檢測到搖動事件,必須喚醒屏幕。 如果我將設備連接到系統,設備會正確喚醒。 如果我斷開設備,色度平板電腦不醒來。但三星設備醒來。如果設備檢測到搖動事件,則喚醒屏幕
這樣我就通過在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();
}
請幫我解決這些問題。
我在這裏沒有使用服務。我在廣播接收器中註冊sensorListener。 – user3128585 2014-10-10 09:11:22
然後嘗試使用服務:)您的廣播接收器需要在活動暫停時工作。或者,如果你不註銷Receiver onPause它是一個內存泄漏... – SpyZip 2014-10-10 09:20:59
我用廣播接收機檢測屏幕關閉,大部分是我收到廣播消息。有時它失敗。還有一些設備,即使我重置mAccel,mAccelLast,在maccel值達到> = 1後,mAccelCurrent的值,在取消註冊和註冊傳感器後,我得到了相同的mAccel值。如果我在logcat中打印傳感器事件值。我得到了以前的x,y,z值。它沒有被重置。 – user3128585 2014-10-10 10:53:01