Отображение показаний нескольких датчиков на экране - PullRequest
0 голосов
/ 13 октября 2019

Я пытаюсь отобразить показания нескольких датчиков на экране (акселерометр, магнитометр и т. Д.) В отдельной строке текста. Я могу изменить текст на экране для одного типа датчика (акселерометр), но не для другого датчика.

Я зарегистрировал оба датчика как Слушатели, но не знаю, как обновить каждый из них отдельно в функции 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

Гироскоп

Гироскоп1023 *

GyroZ


1 Ответ

0 голосов
/ 14 октября 2019

Вам необходимо проверить каждое сенсорное событие на свой измененный:

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) {
  ...
}
...