이미지를 이용한 방향 센서입니다..
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");
}
}
}
}
}