0

我有 Preferences Activity,它在偏好更改时启动服务。在服务中,我想检测摇晃动作。我在下面的这段代码,当我在活动中使用它时工作正常,但是当我想在服务中使用它时,它就无法工作,这就是我在服务中使用抖动检测器代码的方式,我的代码有什么问题?

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!” 吐司。我应该怎么办。谢谢是提前。

4

2 回答 2

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

  2. 显示Toast from service也可能有问题,要验证代码使用LOG或者show toast这样

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

于 2012-12-08T18:59:47.787 回答
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;
   }

这应该够了吧 :)

于 2014-05-20T22:47:54.610 回答