Цель создания кода состоит в том, что всякий раз, когда данные из шагометра изменяются, данные передаются в режиме реального времени через функцию onsensorchanged (). Та же функция, данные собираются правильно каждый раз, когда они носят и не любят независимо от вне экрана /на экране. /> Мои симптомы соответствуют ссылке выше, но ни один из ответов на эту проблему не помог мне получить значения шагометра в режиме реального времени.
import android.content.Context
import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager
import android.util.Log
import com.health.multisensors.util.JsonFileWriter
import org.json.JSONObject
class PedometerModule(private val context: Context) : SensorEventListener {
private val TAG = "PedometerModule"
private var sensorManager: SensorManager? = null
private var stepCounter: Sensor? = null
private var stepDetector: Sensor? = null
private var initialSteps: Float? = null
fun startTracking() {
Log.i(TAG, "Starting Pedometer tracking...")
sensorManager = context.getSystemService(Context.SENSOR_SERVICE) as SensorManager
stepCounter = sensorManager?.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)
stepDetector = sensorManager?.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR)
if (stepCounter == null) {
Log.w(TAG, "Step Counter sensor not available.")
} else {
sensorManager?.registerListener(this, stepCounter, SensorManager.SENSOR_DELAY_NORMAL)
}
if (stepDetector == null) {
Log.w(TAG, "Step Detector sensor not available.")
} else {
sensorManager?.registerListener(this, stepDetector, SensorManager.SENSOR_DELAY_FASTEST)
}
}
fun stopTracking() {
sensorManager?.unregisterListener(this)
Log.i(TAG, "Stopped Pedometer tracking.")
}
**override fun onSensorChanged(event: SensorEvent?) {
if (event == null) return
val timestamp = System.currentTimeMillis()
when (event.sensor.type) {
Sensor.TYPE_STEP_COUNTER -> {
val steps = event.values[0]
if (initialSteps == null) initialSteps = steps
val stepCount = steps - (initialSteps ?: 0f)
Log.d(TAG, "StepCounter: $stepCount at $timestamp")
val json = JSONObject().apply {
put("sensor", "pedometer")
put("timestamp", timestamp)
put("total_steps", steps.toInt())
put("relative_steps", stepCount.toInt())
}
JsonFileWriter.writeJson(context, json)
}
Sensor.TYPE_STEP_DETECTOR -> {
Log.d(TAG, "StepDetector: step detected at $timestamp")
val json = JSONObject().apply {
put("sensor", "step_detector")
put("timestamp", timestamp)
put("step", 1)
}
JsonFileWriter.writeJson(context, json)
}
}
}**
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
// Not used
}
}
< /code>
Манифест включает в себя передний план и несколько настройки разрешений, как показано ниже, а также функция использования также включает в себя отстрант и Stepdetector. < /p>
```
I've also tried periodically turning the sensor itself off and on, but none of this has been able to fetch stepcount in real-time.
Подробнее здесь: https://stackoverflow.com/questions/796 ... -pedometer
Onsensorchanged () не работает только на шагомере ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение