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


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);

뭐가 문제일까요?

  • 2017년 10월 31일에 작성됨

조회수 123


1 답변


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

public class MainActivity extends AppCompatActivity implements SensorEventListener

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

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

  • 2017년 11월 07일에 작성됨
    안드로이드 입문

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close