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(); 言う行

オブジェクト型のメソッド onPause() は未定義です

クラスに onResume と onPause を実装する際に問題はありますか?

私はアンドロイド開発の初心者なので、それについて明確な考えを教えてください。

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そしてクラスonPauseのメソッドです。Activityアクティビティをオーバーライドしていません。

が の場合ShakeListenerは、クラスActivityを拡張する必要があります。Activityお気に入り

public class ShakeListener extends 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 クラスのandをActivity取得できるように、クラスをクラスのサブクラスにする必要があります。onPauseonResume

public class ShakeListener extends Activity

現在、あなたのクラスはandメソッドObjectを持たないクラスのサブクラスです。これが、 andを呼び出すときに例外が発生する理由です。onResumeonPausesuper.onPausesuper.onResume

于 2013-12-02T06:27:54.317 に答える