如何检测服务中的抖动

时间:2012-12-08 17:26:05

标签: android shake

我有偏好设置活动,它会根据偏好设置更改启动服务。 在服务上我想检测摇动动作。 我在下面的代码,当我在一个活动中使用它时工作正常,但是当我想在服务上使用它时,它就不会工作,这就是我在服务中使用我的震动探测器代码的方式,我的代码有什么问题?

public class back extends Service {
SensorManager mSensorManager;
ShakeEventListener mSensorListener;



@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();

}

@Override
public void onStart(Intent intent, int startId) {
    // TODO Auto-generated method stub
    Toast.makeText(back.this, "Service Started", Toast.LENGTH_LONG).show();

     mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        mSensorListener = new ShakeEventListener();   

        mSensorListener.setOnShakeListener(new ShakeEventListener.OnShakeListener() {

          public void onShake() {
            Toast.makeText(back.this, "Shake!", Toast.LENGTH_SHORT).show();
          }
        });

}


protected void onResume() {
    mSensorManager.registerListener(mSensorListener,
        mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
        SensorManager.SENSOR_DELAY_UI);
  }

  protected void onPause() {
    mSensorManager.unregisterListener(mSensorListener);

  }

@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
}


}

我得到了“Service Started”Toast,这意味着服务已经启动,但在我摇动设备之后,我看不到“Shake!”吐司。我该怎么办。 谢谢你的到来。

2 个答案:

答案 0 :(得分:0)

  1. 服务没有onResume和onPause http://developer.android.com/guide/components/services.html#Lifecycle

  2. 也可能出现服务显示Toast问题,验证代码是否使用LOG或显示这样的吐司

    new Handler()。post(new Runnable(){     public void run(){        Toast.makeText(getApplicationContext(),“msg”,Toast.LENGTH_LONG)。show(); }

答案 1 :(得分:0)

删除Resume和onPause。它不是服务的一部分。将其替换为OnStartCommand()请参阅代码。

 public int onStartCommand(Intent intent, int flags, int startId){

   mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
   mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
   mSensorManager.registerListener(mShakeDetector, mAccelerometer,    SensorManager.SENSOR_DELAY_UI,new Handler());

   return START_STICKY;
   }

应该这样做:)