程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了步进传感器不计入文本视图(在片段中)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决步进传感器不计入文本视图(在片段中)?

开发过程中遇到步进传感器不计入文本视图(在片段中)的问题如何解决?下面主要结合日常开发的经验,给出你关于步进传感器不计入文本视图(在片段中)的解决方法建议,希望对你解决步进传感器不计入文本视图(在片段中)有所启发或帮助;

我一直在使用片段在 androID studio(使用 kotlin)上做一个项目。我打算在另一个片段中实现一个步进传感器,但它没有用,也没有错误。我不知道错误在哪里。传感器看起来不错,但在文本视图中没有计算步数。我将传感器的代码放在片段类中。任何人都可以帮助我吗?应用程序没有崩溃,也没有告诉错误在哪里,只是没有计算步数

这是Fragment Class的代码

package com.androIDdevs.runningappyt.ui.fragments
import androID.content.Context.SENSOR_serviCE
import androID.harDWare.Sensor
import androID.harDWare.SensorEvent
import androID.harDWare.SensorEventListener
import androID.harDWare.SensoRMANager
import androID.os.bundle
import androID.util.Log
import androID.vIEw.VIEw
import androID.Widget.Toast
import androID.vIEw.LayoutInflater
import androID.vIEw.VIEwGroup
import androIDx.fragment.app.Fragment
import com.androIDdevs.runningappyt.R
import com.androIDdevs.runningappyt.ui.viewmodels.Mainviewmodel
import com.androIDdevs.runningappyt.ui.viewmodels.AppUtils
import dagger.hilt.androID.AndroIDEntryPoint
import kotlinx.androID.synthetic.main.fragment_steps.*
import java.util.*
import com.androIDdevs.runningappyt.core.SharedPreferencesmanager
@AndroIDEntryPoint
class StepsFragment : Fragment(R.layout.fragment_steps),SensorEventListener
{
private var isstarted = false
private var sensoRMANager: SensoRMANager? = null
private var stepCounter = 0
private var counterSteps = 0
private var stepDetector = 0
private var startDate: Date? = null
private var endDate: Date? = null


companion object{
    fun newInstance() = StepsFragment()
    const val TAG = "StepsFragment"}
private lateinit var viewmodel: Mainviewmodel
overrIDe fun onCreateVIEw(
    inflater: LayoutInflater,container: VIEwGroup?,savedInstanceState: Bundle?
): VIEw {
    return inflater.inflate(R.layout.fragment_steps,stepsContainer,falsE)
}
overrIDe fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceStatE)l

    sensoRMANager = context?.getSystemservice(SENSOR_serviCE) as SensoRMANager

    // load prevIoUs status if any
    SharedPreferencesmanager.instance.loadStartDate(startDatE)
     SharedPreferencesmanager.instance.loadInitialStepCount(counterSteps)

    Log.d(tag,"startDate = $startDate")
    Log.d(tag,"counterSteps = $counterSteps")

    if (startDate != null) {
        isstarted = true
    }

    initUI()
    bindUI()
}

overrIDe fun onResume() {
    super.onResume()
    if (this.isstarted) {
        startservice()
    }
}

overrIDe fun onPause() {
    super.onPause()
    stopservice()
}

overrIDe fun onAccuracyChanged(sensor: Sensor?,accuracy: int) {
    Log.d(tag,"accuracy = $accuracy")
}

overrIDe fun onSensorChanged(event: SensorEvent) {
    when (event.sensor.typE) {
        Sensor.TYPE_STEP_DETECTOR -> {
            stepDetector++
        }
        Sensor.TYPE_STEP_COUNTER -> {
            if (counterSteps < 1) {
                counterSteps = event.values[0].toInt()
              SharedPreferencesmanager.instance.saveInitialStepCount(counterSteps)
            }
            stepCounter = event.values[0].toInt() - counterSteps
        }
    }
    tv_step_count.text = "$stepCounter"
}

private fun initUI() {
    startDate?.let {
        tv_start_time.text = getString(R.String.start_time,AppUtils.getFormattedDate(it))
    } ?: run {
        tv_start_time.text = getString(R.String.start_time,"-")
    }

    tv_end_time.text = getString(R.String.end_time,"-")
    tv_step_count.text = "$stepCounter"

    if (this.isstarted) {
        btn_start.text = getString(R.String.stop)
    } else {
        btn_start.text = getString(R.String.start)
    }
}

private fun bindUI() {
    btn_start.setonClickListener {
        if (this.isstarted) {
            stopCounter()
            btn_start.text = getString(R.String.start)
        } else {
            startCounter()
            btn_start.text = getString(R.String.stop)
        }
    }
}

private fun startservice() {
    val stepsSensor = sensoRMANager?.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)

    if (stepsSensor == null) {
        Toast.makeText(context,"No Step Counter Sensor !",Toast.LENGTH_SHORT).show()
    } else {
        sensoRMANager?.registerListener(this,stepsSensor,SensoRMANager.SENSOR_DELAY_UI)
    }
}

private fun stopservice() {
    sensoRMANager?.unregisterListener(this)
}

private fun startCounter() {
    isstarted = true
    this.stepCounter = 0
    this.stepDetector = 0
    this.counterSteps = 0

    // reset UI
    initUI()

    startDate = Date()
    startDate?.let {
        tv_start_time.text =
            getString(R.String.start_time,AppUtils.getFormattedDate(it))
     SharedPreferencesmanager.instance.saveStartDate(it)
    }

    startservice()
}

private fun stopCounter() {
    Log.d(tag,"stopCounter")
    isstarted = false
    endDate = Date()
    endDate?.let {
        tv_end_time.text =
            getString(R.String.end_time,AppUtils.getFormattedDate(it))
    }
    stopservice()
   SharedPreferencesmanager.instance.clear()
}}

这是 XML

<?xml version="1.0" enCoding="utf-8"?>
<androIDx.consTraintlayout.Widget.ConsTraintLayout  xmlns:androID="http://scheR_12_11845@as.androID.com/apk/res/androID"
 xmlns:app="http://scheR_12_11845@as.androID.com/apk/res-auto"
 xmlns:tools="http://scheR_12_11845@as.androID.com/tools"
 androID:layout_wIDth="match_parent"
 androID:layout_height="match_parent"
 tools:context=".ui.MainActivity"
  androID:ID="@+ID/stepsContainer">

<TextVIEw
    androID:ID="@+ID/title"
    androID:layout_wIDth="wrap_content"
    androID:layout_height="wrap_content"
    androID:layout_marginStart="8dp"
    androID:layout_margintop="50dp"
    androID:layout_marginEnd="8dp"
    androID:text="@String/app_name"
    androID:textSize="40sp"
    app:layout_consTraintEnd_toEndOf="parent"
    app:layout_consTraintStart_toStartOf="parent"
    app:layout_consTrainttop_totopOf="parent" />

<button
    androID:ID="@+ID/btn_start"
    androID:layout_wIDth="wrap_content"
    androID:layout_height="wrap_content"
    androID:layout_margintop="20dp"
    androID:text="@String/start"
    app:layout_consTraintEnd_toEndOf="parent"
    app:layout_consTraintStart_toStartOf="parent"
    app:layout_consTrainttop_toBottomOf="@+ID/title" />

<TextVIEw
    androID:ID="@+ID/tv_start_time"
    androID:layout_wIDth="wrap_content"
    androID:layout_height="wrap_content"
    androID:layout_marginStart="8dp"
    androID:layout_margintop="48dp"
    androID:layout_marginEnd="8dp"
    androID:textSize="20sp"
    app:layout_consTraintEnd_toEndOf="parent"
    app:layout_consTraintStart_toStartOf="parent"
    app:layout_consTrainttop_toBottomOf="@+ID/btn_start"
    tools:text="@String/start_time" />

<TextVIEw
    androID:ID="@+ID/tv_end_time"
    androID:layout_wIDth="wrap_content"
    androID:layout_height="wrap_content"
    androID:layout_marginStart="8dp"
    androID:layout_margintop="48dp"
    androID:layout_marginEnd="8dp"
    androID:textSize="20sp"
    app:layout_consTraintEnd_toEndOf="parent"
    app:layout_consTraintStart_toStartOf="parent"
    app:layout_consTrainttop_toBottomOf="@+ID/tv_start_time"
    tools:text="@String/end_time" />

<TextVIEw
    androID:ID="@+ID/tv_step_count"
    androID:layout_wIDth="wrap_content"
    androID:layout_height="wrap_content"
    androID:layout_marginStart="8dp"
    androID:layout_margintop="48dp"
    androID:layout_marginEnd="8dp"
    androID:textSize="35sp"
    app:layout_consTraintEnd_toEndOf="parent"
    app:layout_consTraintStart_toStartOf="parent"
    app:layout_consTrainttop_toBottomOf="@+ID/tv_end_time"
    tools:text="0" />
    </androIDx.consTraintlayout.Widget.ConsTraintLayout>

解决方法

可能的解决方案是使用 @H_884_9@mutableLiveData()。

它是如何工作的?

@H_884_9@mutableLiveData() 有 observe() 方法,可以在每次状态更改时收到通知。

参见this page以查看如何实现它的示例

大佬总结

以上是大佬教程为你收集整理的步进传感器不计入文本视图(在片段中)全部内容,希望文章能够帮你解决步进传感器不计入文本视图(在片段中)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: