1

我有一个 ShakeListener 类,我已经在其中实现了 onPause() 和 onResume() 方法。我的代码是

package com.example.shakedemo;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.content.Context;
import java.lang.UnsupportedOperationException;


public class ShakeListener
{
      private SensorManager mSensorManager;
      private float mAccel; // acceleration apart from gravity
      private float mAccelCurrent; // current acceleration including gravity
      private float mAccelLast; // last acceleration including gravity

  private final SensorEventListener mSensorListener = new SensorEventListener() {

    public void onSensorChanged(SensorEvent se) {
      float x = se.values[0];
      float y = se.values[1];
      float z = se.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
    }

    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }


  };



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

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

  }
}

但它在 super.onPause(); 上都显示错误。和 super.onResume(); 说的行

未定义 Object 类型的 onPause() 方法

在一个类中实现 onResume 和 onPause 有什么问题吗?

由于我是android开发的新手,请给我一个清晰的想法。

4

3 回答 3

2

问题是您的实现调用了super不存在的方法版本。

protected void onResume() {
    super.onResume(); // <== This line needs to be removed
    mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
}

protected void onPause() {
    super.onPause(); // <== This line needs to go as well
    mSensorManager.unregisterListener(mSensorListener);

}

要么摆脱super调用(这是最有意义的),要么从实现方法的类继承。

于 2013-12-02T06:20:56.130 回答
1

onResume并且onPauseActivity类的方法。您没有覆盖活动。

如果ShakeListenerActivity你需要扩展Activity类。喜欢

public class ShakeListener extends Activity 

如果那不是一个 Activity 类,那么不要调用超级版本。

把它们当作

public void registerListener() {
    mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
  }

  public void unregisterListener() {
    mSensorManager.unregisterListener(mSensorListener);

  }
于 2013-12-02T06:21:18.070 回答
1

你需要让你的类成为类的子Activity类,这样你才能得到Activity类的onPauseand onResume

public class ShakeListener extends Activity

目前,您的类是Object没有onResumeandonPause方法的类的子类,这就是为什么当您调用super.onPauseand时super.onResume,您会遇到异常。

于 2013-12-02T06:27:54.317 回答