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

안드로이드 스튜디오 방향전환 센서 질문입니다

0 추천
package com.example.practice;

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

뭐가 문제일까요?
공대여자 (120 포인트) 님이 2017년 10월 31일 질문
공대여자님이 2017년 10월 31일 수정

1개의 답변

0 추천

MainActivity 가 SensorEventListener를 impletation 하고있지 않네요.

상속하신후에 구현해보세요

익명사용자 님이 2017년 11월 6일 답변
...