- Forum-Beiträge: 609
06.04.2020, 11:44:57 via Website
06.04.2020 11:44:57 via Website
Hallo zusammen
Ich möchte in meinem Programm die Werte vom Sensor nur jede Minute lesen. Ich habe dies mit einem Händler gemacht.
package ch.robbisoft.sensortest
import android.content.Context
import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager
import android.os.Bundle
import android.os.Handler
import android.support.v7.app.AppCompatActivity
import android.view.View
import android.widget.TextView
import java.util.*
class MainActivity : AppCompatActivity(), SensorEventListener {
//Luftdruck
private var sensorManager: SensorManager? = null
private var pressur: Sensor? = null
private var txt_durck: TextView? = null
//Temperatur
private var temp: Sensor? = null
private var txt_temperatur: TextView? = null
//Luftfeuchtigkeit
private var feucht: Sensor? = null
private var txt_feuchttxt: TextView? = null
private var f_feucht : Float = 0.0f
private var f_temparatur : Float = 0.0f
private var f_druck : Float = 0.0f
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//Händler
val steuerung = Handler()
txt_durck = findViewById<View>(R.id.txt_druck) as TextView
txt_temperatur = findViewById<View>(R.id.txt_temp) as TextView
txt_feuchttxt = findViewById<View>(R.id.txt_feucht) as TextView
sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
if (sensorManager!!.getDefaultSensor(Sensor.TYPE_PRESSURE) != null) { // Success! There's a pressure sensor.
pressur = sensorManager!!.getDefaultSensor(Sensor.TYPE_PRESSURE)
temp = sensorManager!!.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE)
feucht = sensorManager!!.getDefaultSensor(Sensor.TYPE_RELATIVE_HUMIDITY)
} else { // Failure! No pressure sensor.
txt_durck!!.text = "kein Sensor vorhanden"
}
val ereignis = object : Runnable{
override fun run() {
txt_durck!!.text = String.format("%#.2f hPa", f_druck)
txt_temperatur!!.text = String.format("%#.2f°", f_temparatur)
txt_feuchttxt!!.text = String.format("%#.2f", f_feucht) + "%"
steuerung.postDelayed(this, 60000L)
}
}
steuerung.postDelayed(ereignis, 0L)
}
override fun onSensorChanged(sensorEvent: SensorEvent) {
val f_wert: Float
val n_typ: Int
n_typ = sensorEvent.sensor.type
when (n_typ) {
Sensor.TYPE_PRESSURE -> {
f_druck = sensorEvent.values[0]
// f_wert = sensorEvent.values[0]
// txt_durck!!.text = String.format("%#.2f hPa", f_wert)
}
Sensor.TYPE_AMBIENT_TEMPERATURE -> {
f_temparatur = sensorEvent.values[0]
// f_wert = sensorEvent.values[0]
// txt_temperatur!!.text = String.format("%#.2f°", f_wert)
}
Sensor.TYPE_RELATIVE_HUMIDITY -> {
f_feucht = sensorEvent.values[0]
// f_wert = sensorEvent.values[0]
// txt_feuchttxt!!.text = String.format("%#.2f", f_wert) + "%"
}
}
}
override fun onAccuracyChanged(sensor: Sensor, i: Int) {}
override fun onResume() {
super.onResume()
sensorManager!!.registerListener(this, pressur, SensorManager.SENSOR_DELAY_NORMAL)
sensorManager!!.registerListener(this, temp, SensorManager.SENSOR_DELAY_NORMAL)
sensorManager!!.registerListener(this, feucht, SensorManager.SENSOR_DELAY_NORMAL)
}
override fun onDestroy() {
sensorManager!!.unregisterListener(this)
super.onDestroy()
}
}
Ist das so machbar oder gibt es einen besseren Weg. Was mich an meinem Programm stört, ist der Umstand, dass die Sensoren im Hintergrund dauernd gelesen werden.
Gruss Renato
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.