方法onPause(),onResume()未定义类型

时间:2013-12-02 06:17:55

标签: android android-sensors onresume onpause sensormanager

我有一个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开发中的新手,请给我清楚的想法。

3 个答案:

答案 0 :(得分: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调用(最有意义),要么从实现方法的类继承。

答案 1 :(得分:1)

onResumeonPauseActivity类的方法。你没有压倒这项活动。

如果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);

  }

答案 2 :(得分:1)

您需要使您的类成为Activity类的子类,以便您可以获取Activity类的onPauseonResume

public class ShakeListener extends Activity

目前,您的类是Object类的子类,没有onResumeonPause方法,这就是您调用super.onPause和{{1你得到了例外。