가속도 센서 가져오는 예제입니다.
화면은 간단히 start버튼을 누르면 센서값 가져오기 시작하고end버튼 누르면 꺼져요..
Xml입니다
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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:background="#353839"
android:layout_height="match_parent" android:orientation="vertical"
android:id="@+id/LinearParent" >
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content" android:background="#282A2B"/>
<TextView
android:text=""
android:layout_width="match_parent"
android:layout_height="0dp" tools:layout_editor_absoluteY="49dp"
tools:layout_editor_absoluteX="32dp" android:id="@+id/textView" android:layout_margin="0dp"
android:scrollbars="vertical" android:textColor="#FFFFFF" android:paddingLeft="14pt"
android:paddingRight="10pt" android:lineSpacingExtra="5dp" android:layout_weight="9"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_weight="1">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="15dp" android:layout_weight="1">
<Button
android:text="Start"
android:layout_width="75pt"
android:layout_height="25pt" android:id="@+id/btn_start" android:layout_weight="1"
android:layout_marginStart="10.5pt"
android:layout_marginEnd="8.5pt" android:textColor="#8B8888" android:textStyle="bold"
android:textAlignment="center"
android:textAllCaps="false" android:textSize="10.5pt"
/>
<Button
android:text="End"
android:layout_width="75pt"
android:layout_height="25pt" android:id="@+id/btn_end"
android:layout_weight="1"
android:layout_marginStart="0pt" android:layout_marginEnd="8.5pt" android:textColor="#FFFFFF" android:textStyle="bold"
android:textAllCaps="false" android:textSize="10.5pt"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
MainActivity.kt
변수선언 :
public var m_printString:String=""
//Using the Accelometer & Gyroscoper
private var mSensorManager: SensorManager? = null
var lastTime: Long = 0
var speed = 0.toDouble()
var lastX = 0.toDouble()
var lastY = 0.toDouble()
var lastZ = 0.toDouble()
private var mAccLis: SensorEventListener? = null
private var mAccelometerSensor: Sensor? = null
onCreate안에
mSensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
//Using the Accelometer
mAccelometerSensor = mSensorManager!!.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
mAccLis = AccelometerListener()
센서 셋팅~
Start버튼 누르면
mSensorManager!!.registerListener(
mAccLis,mAccelometerSensor,SensorManager.SENSOR_DELAY_UI)
이 Listener를 받아줄 inner class(SensorEventListener)
private inner class AccelometerListener : SensorEventListener {
override fun onSensorChanged(event: SensorEvent) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
val currentTime = System.currentTimeMillis();
val gabOfTime = (currentTime - lastTime);
if (gabOfTime > 100) {
lastTime = currentTime;
val accX = event.values[0].toDouble()
val accY = event.values[1].toDouble()
val accZ = event.values[2].toDouble()
val angleXZ = Math.atan2(accX, accZ) * 180 / Math.PI
val angleYZ = Math.atan2(accY, accZ) * 180 / Math.PI
val gravityX=accX/SensorManager.GRAVITY_EARTH
val gravityY=accY/SensorManager.GRAVITY_EARTH
val gravityZ=accZ/SensorManager.GRAVITY_EARTH
speed = Math.abs(accX + accY + accZ - lastX - lastY - lastZ) / gabOfTime * 10000;
lastX = event.values[0].toDouble();
lastY = event.values[1].toDouble();
lastZ = event.values[2].toDouble();
m_printString="Date :" + getDateString("yyyy-MM-dd hh:mm:ss") + " [X]:" + String.format("%.4f", event.values[0]) +
" [Y]:" + String.format("%.4f", event.values[1]) +
" [Z]:" + String.format("%.4f", event.values[2]) +
" [angleXZ]: " + String.format("%.4f", angleXZ) +
" [angleYZ]: " + String.format("%.4f", angleYZ) +
" [speed]: " + String.format("%.4f", speed) +"\n \n"
}
}
}
override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) {
}
} <pre style="background-color:#ffffff;color:#000000;font-family:'굴림체';font-size:7.2pt;"></pre>
위에 변수로 선언한
m_printString로 화면에 찍어주면
됨..
fun printData(str:String){
textView.append(str)
var scrollAmount=textView.getLayout().getLineTop(textView.lineCount)-textView.height
if(scrollAmount>0)
textView.scrollTo(0,scrollAmount)
else
textView.scrollTo(0,0)
if(textView.text.length > 10000) {
textView.text = ""
}
}
자동 스크롤과 화면 리셋도 추가된 함수입니다 위에꺼요..
'Kotlin' 카테고리의 다른 글
자동으로 레이아웃 맞추기 (0) | 2020.01.21 |
---|---|
라디오그룹, ImageView, editText, TextView사용법 (0) | 2020.01.21 |
백그라운드 서비스 (코틀린) (0) | 2020.01.21 |
Json Object Request (Login 예제) (0) | 2020.01.21 |
thread안에선 다른짓 하지말자 (0) | 2020.01.21 |