핸드폰을 구매하고 몇 년 후 다시 새로운 핸드폰을 구매 할 때까지 한번 사용해 보기는 커녕 그런 앱이 있는지 조차 알지도 못하는
수많은 앱이 설치되어 있습니다.
앱은 그나마 볼 수라도 있지만 껍데기로 가려진 손바닦
만한 핸드폰에는 이름도 생소한 장치들이 빼곡히 들어 차 있습니다.
저는 스스로 찾아서 사용 하는 센서 종류를 세어본다면 다섯 손가락도 다
못 꼽을 정도로 사용을 하고 있네요.
화면
자동 회전도 뉴스 좀 읽다가 지하철이 흔들리면 헤까닥 뒤집어져서 짜증이나 사용 안하고, 자동 밝기도
사용 안하고,
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에서 생성한 가상 디바이스를
사용하지 말고 실제 핸드폰에서 테스트 해보세요.
그러면 아래와 같은 화면이 나옵니다.
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 정보를 삭제 하고 다시 실행 하면 됩니다.
4.3 APK File
Android Studio가 없거나 귀찮아 첨부된 APK 파일을 이용하여 핸드폰에서 실행을 하려면 출처를 알 수 없은 앱 설치를
가능하게 하고 실행을 해야 합니다.
테스트 후에는 다시 출처를 알 수 없는
앱 설치 가능을 차단 하거나 나중에 은행 앱을 실행 할때 이 기능을 차단하라고
다시 메시지가 뜨면 바꿔주면 됩니다.
- copy coding -
'Android' 카테고리의 다른 글
안드로이드 광 센서 테스트 (TYPE_LIGHT) (0) | 2018.09.27 |
---|---|
안드로이드 핸드폰 센서 비교 (TYPE_STEP_DETECTOR 와 TYPE_STEP_COUNTER) (2) | 2018.09.15 |
안드로이드 핸드폰 걸음 수 측정 센서 예제 (TYPE_STEP_COUNTER) (4) | 2018.09.14 |
안드로이드 핸드폰 걸음 감지 센서 작동 테스트 (TYPE_STEP_DETECTOR) (3) | 2018.09.12 |
안드로이드 핸드폰 근접 센서 작동 테스트 (TYPE_PROXIMITY) (0) | 2018.09.10 |