【问题标题】:Displaying multiple sensors readings on screen在屏幕上显示多个传感器读数
【发布时间】:2019-10-13 04:13:27
【问题描述】:

我正在尝试在屏幕上以自己的文本行显示多个传感器读数(加速度计、磁力计等)。我可以更改一种传感器(加速度计)的屏幕上的文本,但不能更改另一种传感器。

我将两个传感器都注册为侦听器,但不知道如何在 onSensorChanged 函数中分别更新每个传感器。

package com.example.sensorlistener_kotlin

import android.annotation.SuppressLint
import android.content.Context
import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity(), SensorEventListener {

    lateinit var sensorManager: SensorManager

    override fun onAccuracyChanged(p0: Sensor?, p1: Int) {
    }

    @SuppressLint("SetTextI18n")
    override fun onSensorChanged(event: SensorEvent?) {

        label_accelerometerX.text = "X = ${event!!.values[0]}"
        label_accelerometerY.text = "Y = ${event.values[1]}"
        label_accelerometerZ.text = "Z = ${event.values[2]}"

    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager

        sensorManager.registerListener(
            this,
            sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            SensorManager.SENSOR_DELAY_NORMAL
        )

/*        sensorManager.registerListener(
            this,
            sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
            SensorManager.SENSOR_DELAY_NORMAL
        )*/

    }
}

作为最终结果,我想在屏幕上单独显示加速度计、磁力计和陀螺仪的 X、Y、Z 分量,如下所示:


加速度计X

加速度计Y

加速度计Z

磁力计X

磁力计Y

磁力计Z

陀螺仪

陀螺仪

陀螺仪


【问题讨论】:

    标签: android kotlin android-sensors sensormanager


    【解决方案1】:

    您需要检查 onsensorchanged 上的每个传感器事件:

    if (sensorEvent.sensor.type == Sensor.TYPE_ACCELEROMETER) {
                        label_accelerometerX.text = sensorEvent.values[0] 
                       ...
    }
    
    if (sensorEvent.sensor.type == Sensor.TYPE_MAGNETOMETER) {
      ...
    }
    
    if (sensorEvent.sensor.type == Sensor.TYPE_GYROSCOPE) {
      ...
    }
    

    【讨论】:

    • 是的!这正是我所需要的。非常感谢!
    • 你知道我如何更新 if 语句之外的值吗?每次我尝试时,文本条目都是空白的(我认为这意味着一个空字符串)。例如: If (sensorEvent.sensor.type == Sensor.TYPE_ACCELEROMETER) { accelX = sensorEvent.values[0] ... } label_accelerometerX.text = accelX.toString()
    猜你喜欢
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多