백그라운드 서비스에 흔듬감지기능을 넣고자 합니다.
예) .... extends Service implements SensorEventListener
백그라운드에서 흔듬감지가 되었을때 정상적으로 실행이 되는데요..
화면이 꺼진경우 흔들기 하면 당체 먹질 않네요.. 파워버튼 한번누르고 화면이 들어오면 해당 앱이 실행이 안되어있더라도 잘 먹거든요..
그런데 화면이 꺼진후 조금 이후(유휴상태)에 실행해 보면 감지자체가 안됩니다.
혹시 센서가 유휴상태에서는 원래 작동을 안하는건지 정말 난해하군요..ㅡㅡ;
c2dm을 이용한 리시버인 경우에는 유휴상태에서도 브로드캐스트를 이용해서 그런건지 잘 되던데....
혹시 아시는분 답변좀 부탁드립니다.
cpu를 깨우는 코딩도 넣어봤지만 마찬가지네요..
-- PushWakeLock.acquireCpuWakeLock(this);
-- PushWakeLock.releaseCpuLock();
아래는 일부 소스입니다.(cpu깨우기는 빠진 코딩입니다.)
public class doinbackground_shake extends Service implements
SensorEventListener {
private long lastTime;
private float speed;
private float lastX;
private float lastY;
private float lastZ;
private float x, y, z;
int SHAKE_THRESHOLD = 1000;
private static final int DATA_X = SensorManager.DATA_X;
private static final int DATA_Y = SensorManager.DATA_Y;
private static final int DATA_Z = SensorManager.DATA_Z;
SensorManager sensorManager;
Sensor accelerormeterSensor;
// 서비스를 생성할 때 호출
public void onCreate() {
super.onCreate();
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
accelerormeterSensor = sensorManager
.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
}
public void onStart(Intent intent, int startId) {
// Log.e("MyService", "Service startId = " + startId);
super.onStart(intent, startId);
if (accelerormeterSensor != null)
sensorManager.registerListener(this, accelerormeterSensor,
SensorManager.SENSOR_DELAY_GAME);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
long currentTime = System.currentTimeMillis();
long gabOfTime = (currentTime - lastTime);
if (gabOfTime > 100) {
lastTime = currentTime;
x = event.values[SensorManager.DATA_X];
y = event.values[SensorManager.DATA_Y];
z = event.values[SensorManager.DATA_Z];
speed = Math.abs(x + y + z - lastX - lastY - lastZ) / gabOfTime
* 10000;
if (speed > SHAKE_THRESHOLD) {
Log.e("감지", "흔듬감지됨");
}
lastX = event.values[DATA_X];
lastY = event.values[DATA_Y];
lastZ = event.values[DATA_Z];
}
}
// }
}
public void onDestroy() {
super.onDestroy();
if (sensorManager != null)
sensorManager.unregisterListener(this);
}
public IBinder onBind(Intent intent) {
return null;
}
}
* 그런데요. 웃긴건 화면이 꺼지든 어쨌든 usb 연결을 해놓은 상태에서는 어떤상태에서든 정상작동 됩니다.
아마도 유휴상태와 밀접한 관계가 있는것 같은데요.. ㅡㅡ;