핸드폰을 구매하고 몇 년 후 다시 새로운 핸드폰을 구매 할 때까지 한번 사용해 보기는 커녕 그런 앱이 있는지 조차 알지도 못하는

수많은 앱이 설치되어 있습니다.

앱은 그나마 볼 수라도 있지만 껍데기로 가려진 손바닦 만한 핸드폰에는 이름도 생소한 장치들이 빼곡히 들어 차 있습니다. 

저는 스스로 찾아서 사용 하는 센서 종류를 세어본다면 다섯 손가락도 다 못 꼽을 정도로 사용을 하고 있네요. 

화면 자동 회전도 뉴스 좀 읽다가 지하철이 흔들리면 헤까닥 뒤집어져서 짜증이나 사용 안하고, 자동 밝기도 사용 안하고,

GPS 이용 길 찾기는 미리 데스크탑에서 한번 지도보기와 거리 뷰를 검색하고 가기 때문에 거의 사용할 일이 없고, 

그냥 전화 걸기와 문자 보내기만 사용하고 있으니 압력센서, 근접 거리 센서 정도만 나도 모르게 사용하고 있는 듯 합니다.

진동도 일할 때 가끔 놀라게 해서 무음.

집에 쌓여만 가는 철지난 공기계들 속에는 무슨 센서가 있는지 궁금해서 한번 알아보기로 했습니다.



1. Android Sensor 분류


안드로이드 폰에 들어있는 센서들은 크게 3가지로 분류를 하고 있습니다.


1.1 운동 센서(Motion Sensor)

세개의 축을 기준으로 가속력과 회전력을 측정하는 센서로 종류로는 가속도계(accelerometer), 중력 센서(gravity sensor),

자이로스코프(gyroscope), 회전 벡터센서(rotational vector sensor)등이 있습니다.

 

1.2 환경 센서(Environment Sensor)

주변 환경에 대한 온도, 압력, 조도, 습도와 관련된 변수 들을 측정하며 기압계(barometer), 광도계(photometer),

습도계(thermometer) 등이 있습니다.

 

1.3 위치 센서(Position Sensor)

기기(핸드폰)의 물리적 위치에 대한 측정 값으로 방위 센서(orientation sensor), 자력계(magnetometer) 등이 있습니다.

 

2. Android Sensor 종류 및 메소드


2.1 Android Sensor.


 Type

 센서

 값

 설명

 int

 TYPE_ACCELEROMETER

 1 

 가속도 감지, 외부의 충격량과 방향 감지 센서

 int

 TYPE_ALL

 -1 

 모든 센서

 int

 TYPE_AMBIENT_TEMPERATURE

 13 

 주위 온도 감지 센서

 int

 TYPE_GAME_ROTATION_VECTOR

 15 

 보정되지 않은 회전 벡터 센서

 int

 TYPE_GEOMAGNETIC_ROTATION_VECTOR

 20 

 지자기 회전 벡터

 int

 TYPE_GRAVITY

 9 

 축의 방향과 중력 감지

 int

 TYPE_GYROSCOPE

 4 

 회전 정보 감지, 다양한 축의 회전각 감지

 int

 TYPE_LIGHT

 5 

 빛의 세기 감지 센서

 int

 TYPE_MAGNETIC_FIELD

 2 

 자기장 센서

 int

 TYPE_MOTION_DETECT

 30 

 움직임 감지 센서

 int

 TYPE_ORIENTATION

 3 

 방향각 감지 센서

 int

 TYPE_PRESSURE

 6 

 압력 센서

 int

 TYPE_PROXIMITY

 8 

 근접한 물체와의 거리 감지 센서

 int

 TYPE_RELATIVE_HUMIDITY

 12 

 상대 습도 센서

 int

 TYPE_ROTATION_VECTOR

 11 

 회전 벡터 센서

 int

 TYPE_SIGNIFICANT_MOTION

 17 

 중요한 모션 트리거 센서

 int

 TYPE_STEP_COUNTER

 19 

 발걸음 횟수 센서

 int

 TYPE_STEP_DETECTOR

 18 

 발걸음 감지 센서

 int

 TYPE_TEMPERATURE

 7 

 온도 감지. API level 14에서 사용


2.2 Sensor Method


 Type

 Method

 설명

 int

 getType()

 센서의 타입

 String

 getName()

 센서의 이름

 float

 getPower()

 전력 사용량 밀리 암페어(mA)

 float

 getResolution()

 해상도

 float

 getMaximumRange()

 최대 측정 범위

 String

 getVendor()

 제조사

 int

 getVersion()

 버전

 int

 getId()

 ID

 int

 getMinDelay()

 두 이벤트간 최소 지연 마이크로 초

 String

 toString()

 센서에 대한 간략 정보



3. Android Sensor 리스트


위에서 나열한 메소드를 이용한 실제 프로그램을 통해서 어떤 센서 들이 들어있는지 확인을 해 보도록 하는데 너무 간단해서 설명이 필요 없을 듯 합니다.


3.1 프로젝트 생성


Android Studio 를 이용하여 프로젝트를 하나 생성 합니다. 설정 값들은 기본으로 해서 [Next] 버튼을 이용하여 계속 넘어 갑니다.

Device 선택 화면에서 저는 API 14를 선택 해서 생성 했습니다. 본인이 테스트 하려는 것 보다 버전이 낮으면 아무거나 선택 하셔도 됩니다.





3.2 화면 구성 설정


단순히 센서 리스트만 보여 주기 때문에 스크롤이 될 수 있도록 만들어 줍니다.


- activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        
        <TextView
            android:id="@+id/listSensor"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </ScrollView>

</android.support.constraint.ConstraintLayout>



.

3.3 Main 프로그램


onCreate() 함수에서 다 지지고 볶고 끝났네요. 2.1의 센서 종류에서 전체(TYPE_ALL)를 이용하여 2.2 Method로 출력을 하면 됩니다. 

데이터가 많아서 주석 처리한 부분이 있는데 주석을 삭제 하거나 필요한 자료가 더 있으면 method를 참고하여 추가해 주고 실행을 합니다.

핸드폰 화면 말고 Android studio에서도 센서 리스트를 확인 하려면 Log.d()를 사용하여 실행 하면 Logcat에도 리스트를 뿌려 줍니다. 

로그를 보시면 알겠지만 sensor.toString() 이것만 사용해도 기본 정보를 확인 할 수 있습니다.


- MainActivity.java

public class MainActivity extends AppCompatActivity {

    private String TAG = "Sensors";
    private SensorManager sensorManager;
    private String sSensorList = "";

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

        TextView txtSensor = (TextView)findViewById(R.id.listSensor);

        sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        List<Sensor> lstSensor = sensorManager.getSensorList(Sensor.TYPE_ALL);
        for(int i=0; i<lstSensor.size(); i++) {
            Sensor sensor = lstSensor.get(i);
            sSensorList += "Name : " + sensor.getName() + "\n" +
                           "Vendor : " + sensor.getVendor() + "\n" +
//                           "Version : " + sensor.getVersion() + "\n" +
//                           "Power : " + sensor.getPower() + "\n" +
//                           "Type : " + sensor.getType() + "\n" +
                             "toString : " + sensor.toString() + "\n" +
            "";
        }
        txtSensor.setText(sSensorList);
        Log.d(TAG, sSensorList);
    }
}



4. 결과


4.1 결과 화면


프로젝트를 실행 할때는 AVD Manager에서 생성한 가상 디바이스를 사용하지 말고 실제 핸드폰에서 테스트 해보세요.

그러면 아래와 같은 화면이 나옵니다.


android sensor 센서



4.2 Source Code


첨부된 소스파일을 적당한 곳에 압축을 풀고 Android Studio를 이용하여 File > Open 메뉴로 프로젝트 열고 실행을 합니다.

Target Device는 개인 핸드폰으로 설정을 합니다.


만약 실행 중 팝업으로 오류가

Installation failed with message Invalid File: E:\android\app\build\intermediates\split-apk\debug\slices\slice_3.apk

이것 비스무리 하게 발생한다면 Android Studio 상단 Build 메뉴 에서

Build > Clean Project

Build > Rebuild Project

메뉴를 이용하여 기존 Build 정보를 삭제 하고 다시 실행 하면 됩니다.


SensorFind.7z


4.3 APK File


Android Studio가 없거나 귀찮아 첨부된 APK 파일을 이용하여 핸드폰에서 실행을 하려면 출처를 알 수 없은 앱 설치를

가능하게 하고 실행을 해야 합니다.

테스트 후에는 다시 출처를 알 수 없는 앱 설치 가능을 차단 하거나 나중에 은행 앱을 실행 할때 이 기능을 차단하라고

다시 메시지가 뜨면 바꿔주면 됩니다.


SensorFind.apk


- copy coding -


+ Recent posts