마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

센서 코드 오류 질문드려요 ㅠ

0 추천

이미지를 이용한 방향 센서입니다..

Error:(17, 8) error: MainActivity is not abstract and does not override abstract method onAccuracyChanged(Sensor,int) in SensorEventListener

실행시 이렇게 오류가 뜨는데 어떻게 수정해야 하는거죠

 

public class MainActivity extends Activity implements SensorEventListener {

이부분이 오류입니다.. ㅠ 도저히 모르겠습니다..

 

import android.support.v7.app.AppCompatActivity;
import android.app.Activity;
import android.graphics.Color;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.TextView;


public class MainActivity extends Activity implements SensorEventListener {

    private ImageView mPointer;
    private SensorManager mSensorManager;
    private Sensor mAccelerometer;
    private Sensor mMagnetometer;
    private float[] mLastAccelerometer = new float[3];
    private float[] mLastMagnetometer = new float[3];
    private boolean mLastAccelerometerSet = false;
    private boolean mLastMagnetometerSet = false;
    private float mCurrentDegree = 0f;
    TextView pitchValue, rollValue;
    private TextView view;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        view = (TextView) findViewById(R.id.textView);
        view.setBackgroundColor(Color.BLACK);

        mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
        mPointer = (ImageView) findViewById(R.id.pointer);

        pitchValue = (TextView) findViewById(R.id.pitch);
        rollValue = (TextView) findViewById(R.id.roll);
    }

    @Override
    protected void onResume() {
        super.onResume();
        mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_UI);
        mSensorManager.registerListener(this, mMagnetometer, SensorManager.SENSOR_DELAY_UI);
    }

    @Override
    protected void onPause() {
        super.onPause();
        mSensorManager.unregisterListener(this, mAccelerometer);
        mSensorManager.unregisterListener(this, mMagnetometer);
    }

    public static float[] computeOrientation(float[] accel, float[] magnetic) {
        float[] inR = new float[16];
        float[] I = new float[16];
        float[] outR = new float[16];
        float[] values = new float[3];

        SensorManager.getRotationMatrix(inR, I, accel, magnetic);
        SensorManager.remapCoordinateSystem(inR, SensorManager.AXIS_X, SensorManager.AXIS_Y, outR);
        SensorManager.getOrientation(outR, values);
        return values;
    }

    float[] mGravity;
    float[] mGeomagnetic;

    @Override
    public void onSensorChanged(SensorEvent event) {
        long lastComputedTime = 0;

        if (event.sensor == mAccelerometer) {

            System.arraycopy(event.values, 0, mLastAccelerometer, 0, event.values.length);
            mLastAccelerometerSet = true;

        } else if (event.sensor == mMagnetometer) {

            System.arraycopy(event.values, 0, mLastMagnetometer, 0, event.values.length);
            mLastMagnetometerSet = true;
        }

        if (mLastAccelerometerSet && mLastMagnetometerSet) {

            long tempTime = System.currentTimeMillis();
            if (tempTime - lastComputedTime > 1000) {
                float[] orientationValues = computeOrientation
                        (mLastAccelerometer, mLastMagnetometer);

                int pitch = (int) ((360 * orientationValues[1]) / (2 * Math.PI));
                int roll = (int) ((360 * orientationValues[2]) / (2 * Math.PI));


                //경사도
                pitchValue.setText("pitch=" + String.valueOf(pitch));
                //좌우회전
                rollValue.setText("roll=" + String.valueOf(roll));


                RotateAnimation ra = new RotateAnimation(
                        mCurrentDegree,
                        roll,
                        Animation.RELATIVE_TO_SELF, 0.5f,
                        Animation.RELATIVE_TO_SELF,
                        0.5f);

                ra.setDuration(250);
                ra.setFillAfter(true);

                mPointer.startAnimation(ra);
                mCurrentDegree = roll;

                if (pitch < 0) {
                    view.setBackgroundColor(Color.GREEN);
                    view.setText("GO");
                } else {
                    view.setBackgroundColor(Color.RED);
                    view.setText("STOP");
                }
            }
        }
    }
}

 

신전떡볶이 (480 포인트) 님이 2016년 10월 6일 질문

1개의 답변

0 추천
 
채택된 답변

에러로그 상으로는 onAccuracyChanged(Sensor,int) 함수를 오버라이드 하지 않아서 발생한 에러입니다.

바램 (19,650 포인트) 님이 2016년 10월 6일 답변
신전떡볶이님이 2016년 10월 14일 채택됨
...