我有一个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开发中的新手,请给我清楚的想法。
答案 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)
onResume
和onPause
是Activity
类的方法。你没有压倒这项活动。
如果ShakeListener
是Activity
,您需要扩展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类的onPause
和onResume
。
public class ShakeListener extends Activity
目前,您的类是Object
类的子类,没有onResume
和onPause
方法,这就是您调用super.onPause
和{{1你得到了例外。