본문 바로가기

open coding

open coding. 안드로이드 스튜디오 자기장 측정. Magnetic field(마그네틱 필드)

반응형

주변 자기장 값 읽어오는 센서.

동서남북 같은 측정.

가속도 센서와 같이 사용하면 정확한 방향 측정가능.

.................................................

1.

센서 data 받아오기 listener : 센서listener다들 비슷함. Type을 MAGNETIC으로 설정.

 

 

 

 

 

package com.www.magneticfield;

import androidx.appcompat.app.AppCompatActivity;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    //define variables
    TextView textView;

    SensorManager manager;
    SensorListener listener;

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

        //connect to xml
        textView = findViewById(R.id.textView);

        manager = (SensorManager)getSystemService(SENSOR_SERVICE); //각 객체설정
        listener = new SensorListener();

    }//finish

 //sensor start method -> onclick도 설정
    public void startSensor(View view){
        Sensor sensor = manager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);    //Magnetic센서
        //아래 만들었던 리스너 연결
        boolean chk = manager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_UI);
        if(chk == false){
            textView.setText("자기장 센서를 지원하지 않습니다.");
        }
    }
//sensor stop method -> onclick 도 설정
    public void stopSensor(View view){
        manager.unregisterListener(listener);
    }



    //sensor data 받기 listener 설정
    class SensorListener implements SensorEventListener {
        @Override
        public void onSensorChanged(SensorEvent event) {//센서변화
            if(event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD){    //MagneticField센서라면
                textView.setText("x축 주변 자기장 : "+event.values[0] + "\n");
                textView.append("y축 주변 자기장 : "+event.values[1] + "\n");
                textView.append("z축 주변 자기장 : "+event.values[2] );
            }
        }
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {//감도변화

        }
    }//finish

}