Android Sensor
https://developer.android.com/guide/topics/sensors/sensors_motion?hl=ko
현재 안드로이드기기에 들어있는 센서는 3종류로 나뉜다. 레벨14이상이면 다 지원한다.
- 동작 센서(Motion Sensor)
x,y,z 3축을 기준으로 기기의 움직임에 의한 가속력과 회전력을 측정해 준다. 운동센서로는 조깅앱, 핸폰들고 푸샵, 균형잡기 앱, 기울기 게임등에 활용할만한 다음과 센서들이 준비되어있다.
중력 센서(gravity sensor) : 단말의 현재 방향(세워졌던가, 누워있던가)등과 중력(?) 감지
선형 가속도계(linear accelerometer) : 단말의 이동속도등 감지
자이로스코프(gyroscope) ,회전 벡터센서(rotational vector sensor): 단말의 회원각을 감지
중요움직임센서(Use the significant motion sensor) : 걷기,이동,자동차타기 등 위치변화에 큰 움직임등 감지
걸음걸이관련센서(step detector sensor,step counter sensor) : 몇발자국걸었는지 감지
등이 있다 - 위치 센서(Position Sensor)
단말의 위치에서 측정되는 센서값으로 게임용 회원벡터센서(게임상에서 핸폰의 초기위치를 맞추기 위해 임의로 Y축을 조절하도록 함), 방향센서(나침반센서) , 근접센서(일반적으로 5cm가 넘으면 먼값으로 인정된)등이 있다. - 환경 센서(Environment Sensor)
빛, 온도, 상대습도,기압 등을 감지할수 있다.
https://developer.android.com/guide/topics/sensors/sensors_overview
센서 | Android 4.0 (API 레벨 14) | Android 2.3 (API 레벨 9) | Android 2.2 (API 레벨 8) | Android 1.5 (API 레벨 3) |
---|---|---|---|---|
TYPE_ | 예 | 예 | 예 | 예 |
TYPE_ | 예 | 해당 없음 | 해당 없음 | 해당 없음 |
TYPE_ | 예 | 예 | 해당 없음 | 해당 없음 |
TYPE_ | 예 | 예 | 해당 없음1 | 해당 없음1 |
TYPE_ | 예 | 예 | 예 | 예 |
TYPE_ | 예 | 예 | 해당 없음 | 해당 없음 |
TYPE_ | 예 | 예 | 예 | 예 |
TYPE_ | 예2 | 예2 | 예2 | 예 |
TYPE_ | 예 | 예 | 해당 없음1 | 해당 없음1 |
TYPE_ | 예 | 예 | 예 | 예 |
TYPE_ | 예 | 해당 없음 | 해당 없음 | 해당 없음 |
TYPE_ | 예 | 예 | 해당 없음 | 해당 없음 |
TYPE_ | 예2 | 예 | 예 | 예 |
퍼미션추가
<uses-permission android:name="android.hardware.sensor.proximity"/>
<application ...>
package com.example.my.proximitysensor;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements SensorEventListener{
private SensorManager sensorManager;
TextView tvProximity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvProximity = (TextView)findViewById(R.id.tvProximity);
sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
Sensor proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
if(proximitySensor == null) {
Toast.makeText(this, "No Proximity Sensor Found", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onResume() {
super.onResume();
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY),
SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
super.onPause();
sensorManager.unregisterListener(this);
}
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_PROXIMITY) {
if(event.values[0] == 0) {
tvProximity.setText("Near : " + String.valueOf(event.values[0]));
} else {
tvProximity.setText(" Far :" + String.valueOf(event.values[0]));
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
switch (accuracy) {
case SensorManager.SENSOR_STATUS_UNRELIABLE:
Toast.makeText(this, "UNRELIABLE", Toast.LENGTH_SHORT).show();
break;
case SensorManager.SENSOR_STATUS_ACCURACY_LOW:
Toast.makeText(this, "LOW", Toast.LENGTH_SHORT).show();
break;
case SensorManager.SENSOR_STATUS_ACCURACY_MEDIUM:
Toast.makeText(this, "MEDIUM", Toast.LENGTH_SHORT).show();
break;
case SensorManager.SENSOR_STATUS_ACCURACY_HIGH:
Toast.makeText(this, "HIGH", Toast.LENGTH_SHORT).show();
break;
}
}
}
private var sensorManager: SensorManager? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
sensorManager = getSystemService(SENSOR_SERVICE) as SensorManager
}
override fun onResume() {
super.onResume()
sensorManager!!.registerListener(
this,
sensorManager!!.getDefaultSensor(Sensor.TYPE_PROXIMITY),
SensorManager.SENSOR_DELAY_NORMAL
)
}
override fun onPause() {
super.onPause()
sensorManager!!.unregisterListener(this)
}
override fun onSensorChanged(p0: SensorEvent?) {
if(p0?.sensor?.getType() == Sensor.TYPE_PROXIMITY) {
if(p0.values[0] == 0f) {
Log.d("Sensor", p0?.values[0].toString());
} else {
Log.d("Sensor", p0?.values[0].toString());
}
}
}
override fun onAccuracyChanged(p0: Sensor?, p1: Int) {
when (p1) {
SensorManager.SENSOR_STATUS_UNRELIABLE -> Toast.makeText(
this,
"UNRELIABLE",
Toast.LENGTH_SHORT
).show()
SensorManager.SENSOR_STATUS_ACCURACY_LOW -> Toast.makeText(
this,
"LOW",
Toast.LENGTH_SHORT
).show()
SensorManager.SENSOR_STATUS_ACCURACY_MEDIUM -> Toast.makeText(
this,
"MEDIUM",
Toast.LENGTH_SHORT
).show()
SensorManager.SENSOR_STATUS_ACCURACY_HIGH -> Toast.makeText(
this,
"HIGH",
Toast.LENGTH_SHORT
).show()
}
}
0 comments:
댓글 쓰기