안드로이드 스튜디오 방향 센서 질문이요

조회수 1416회

import android.content.DialogInterface; import android.content.Intent; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager;

import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView;

import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Set; import java.util.UUID;

public class MainActivity extends AppCompatActivity { private final int REQUEST_BLUETOOTH_ENABLE = 100;

 private TextView mConnectionStatus;
 private EditText mInputEditText;

 private TextView tv;
 private SensorManager sm;
 private Sensor s;
 private SensorEventListener sel;
 private float pitch;



 ConnectedTask mConnectedTask = null;
 static BluetoothAdapter mBluetoothAdapter;
 private String mConnectedDeviceName = null;
 private ArrayAdapter<String> mConversationArrayAdapter;
 static boolean isConnectionError = false;
 private static final String TAG = "BluetoothClient";



 @Override
 public void onCreate(Bundle savedInstanceState)
 {

     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);

     tv = (TextView)findViewById(R.id.textView1);
     sm = (SensorManager) getSystemService(SENSOR_SERVICE);
     s = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

     Button go = (Button)findViewById(R.id.Button);
     go.setOnClickListener(new View.OnClickListener(){
         public void onClick(View v){
             String sendMessage = mInputEditText.getText().toString();
             switch (v.getId()) {
                 case R.id.Button:
                     sendMessage("m");
                     break;
             }
         }
     });

     Button stop = (Button)findViewById(R.id.Button2);
     stop.setOnClickListener(new View.OnClickListener(){
         public void onClick(View v){
             String sendMessage = mInputEditText.getText().toString();
     switch (v.getId()) {
         case R.id.Button2:
             sendMessage("s");
             break;
             }
         }

     });

     Button back = (Button)findViewById(R.id.Button3);
     back.setOnClickListener(new View.OnClickListener(){
         public void onClick(View v){
              String sendMessage = mInputEditText.getText().toString();
     switch (v.getId()) {
         case R.id.Button3:
         sendMessage("b");
         break;
             }
          }
     });

     mConnectionStatus = (TextView)findViewById(R.id.connection_status_textview);
     mInputEditText = (EditText)findViewById(R.id.input_string_edittext);
     ListView mMessageListview = (ListView) findViewById(R.id.message_listview);

     mConversationArrayAdapter = new ArrayAdapter<>( this,
             android.R.layout.simple_list_item_1 );
   mMessageListview.setAdapter(mConversationArrayAdapter);

 @Override
 protected void onResume() {
     super.onResume();

     sm.registerListener((SensorEventListener) this,s,SensorManager.SENSOR_DELAY_UI);
 }

 @Override
 protected void onPause() {
     super.onPause();
     sm.unregisterListener((SensorEventListener) this);
 }

 public  void onSensorChanged(SensorEvent event){
     if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
         String str = "방향센서값 \n\n"
                 +"\n피치 : " +event.values[1];
         tv.setText(str);
     }
 }

 public void onAccuracyChanged(Sensor sensor, int accuracy){

 }

 protected void onDestroy() {
     super.onDestroy();

     if ( mConnectedTask != null ) {

         mConnectedTask.cancel(true);
     }
 }

라즈베리파이의 에코서버에 블루투스로 접속해서 적당한 문자를 보내면 동작하는 RC카를 만들려고 합니다. 스마트폰에 기울기를 이용해서 방향전환을 하려고 버튼으로 전진 후진 정지 하는 코드에서 방향전환 기능을 넣기전에 일단 기울기 센서값을 받아오는 기능을 추가하려고 이렇게 코딩했는데 (블루투스 기능부분은 뺐습니다)

오류가 이런식으로 떠요

Caused by: java.lang.ClassCastException: com.example.practice.MainActivity cannot be cast to android.hardware.SensorEventListener at com.example.practice.MainActivity.onResume(MainActivity.java:141)

141은 -> sm.registerListener((SensorEventListener) this,s,SensorManager.SENSOR_DELAY_UI);

뭐가 문제일까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 아무래도 this 가 이 메인 액티비티를 말하는건데 센서이벤트리스너로 캐스트 할 수 없다고 오류가 나는것같습니다.

    public class MainActivity extends AppCompatActivity implements SensorEventListener

    센서 이벤트 리스너 인터페이스 구현하시고

    온 센서 체인지드와 온 어큐레이시 체인지 메소드에 @Override 붙여주세용

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)