마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

수평 측정기 App 만드는데 자꾸 앱 중지라는 오류가 떠요 ㅜㅜ

0 추천
수평 측정기 App 만드는데 자꾸 앱 중지라는 오류가 떠요 ㅜㅜ 
앱 실행은 정상적으로 되야하는거 같은데, build.gradle(Module:app)에서 버전같은 걸 다르게 설정해놔야하는건가요?... 도와주세요 ㅜㅜ
 
//MainActivity.kt
package com.example.kimyo.tiltsensor

import android.content.Context
import android.content.pm.ActivityInfo
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.util.Log
import android.view.WindowManager

class MainActivity : AppCompatActivity(), SensorEventListener {
    override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int): Unit =
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.

    override fun onSensorChanged(event: SensorEvent?) {
        // 센서값이 변경되면 호출됨
        // value[0] : x축 값: 위로 기울이면 -10~0, 아래로 기울이면 0~10
        // value[1] : y축 값: 왼쪽으로 기울이면 -10~0, 오른쪽으로 기울이면 0~10
        // value[2] : z축 값: 미사용
        event?.let {
            Log.d(
                "MainActivity", "onSensorChanged: x :" +
                        " ${event.values[0]}, y: ${event.values[1]}, z: ${event.values[2]}"
            )

            tiltView.onSensorEvent(event)

            TODO("not implemented") //To change body of created functions use File | Settings | File Templates.

        }
    }

    private val sensorManager by lazy {
        getSystemService(Context.SENSOR_SERVICE) as SensorManager
    }

    private lateinit var  tiltView: TiltView

    override fun onCreate(savedInstanceState: Bundle?) {
        // 화면이 꺼지지 않게 하기
        window.addFlags(WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON)
        // 화면이 가로 모드로 고정되게 하기
        requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        tiltView = TiltView(this)
        setContentView(tiltView)
    }

    override fun onResume() {
        super.onResume()
        sensorManager.registerListener(this,
            sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            SensorManager.SENSOR_DELAY_NORMAL)
    }

    override fun onPause() {
        super.onPause()
        sensorManager.unregisterListener(this)
    }
}

// TiltView.kt

package com.example.kimyo.tiltsensor

import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.hardware.SensorEvent
import android.view.View

class TiltView(context: Context?) : View(context) {
    private val greenPaint: Paint = Paint()
    private val blackPaint: Paint = Paint()

    private var cX: Float = 0f
    private var cY: Float = 0f

    //
    init {
        // 녹색 페인트
        greenPaint.color = Color.GREEN

        // 검은색 페인트
        blackPaint.color = Color.BLACK
    }

    //
    override fun onSizeChanged(w: Int, h:Int, oldw: Int, oldh: Int) {
        cX = w / 2f
        cY = h / 2f
    }

    //
    override fun onDraw(canvas: Canvas?) {
        // 바깥 원
        canvas?.drawCircle(cX, cY, 100f, blackPaint)
        // 녹색 원
        canvas?.drawCircle(xCoord + cX, yCoord + cY, 100f, greenPaint)
        // 가운데 십자가
        canvas?.drawLine(cX-20, cY, cX+20, cY, blackPaint)
        canvas?.drawLine(cX, cY-20, cX, cY+20, blackPaint)
    }

    private var xCoord: Float = 0f
    private var yCoord: Float = 0f

    //
    fun onSensorEvent(event: SensorEvent) {
        // 화면을 가로로 돌렸으므로 X축과 Y축을 서로 바꿈
        yCoord = event.values[0] * 20
        xCoord = event.values[0] * 20

        invalidate()
    }

}

 

익명사용자 님이 2018년 10월 23일 질문
디버깅 메세지를 같이 첨부해주시는게 좋을것 같습니다.

1개의 답변

0 추천
TODO("not implemented") 함수 지워보세요.
삼성피자 님이 2020년 5월 14일 답변
...