【问题标题】:I have a question about step counter sensor on android我对 android 上的计步器传感器有疑问
【发布时间】:2021-07-29 14:44:41
【问题描述】:

我正在研究 android 传感器,我正在尝试基于软件的计步器传感器,但它不是从 0 开始,而是从 512 继续,我可以理解它写了每日步数作为原因,但是当我要制作计步器应用程序时,如何将其设置为从0开始计数?

class MainActivity : AppCompatActivity() , SensorEventListener {

    private lateinit var  sensorManager : SensorManager

    private lateinit var  step_sensor : Sensor

    lateinit var txt : TextView

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

        sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager

        step_sensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)

        txt = findViewById(R.id.text1)

    }

    override fun onResume() {
        super.onResume()

        sensorManager.registerListener( this , step_sensor , SensorManager.SENSOR_DELAY_NORMAL)
    }

    override fun onSensorChanged(event : SensorEvent?) {

        txt.text = event?.values?.get(0).toString()
    }

    override fun onAccuracyChanged(sensor : Sensor?, accuracy : Int) {

        if (sensor == step_sensor ) {

            when (accuracy) {

                SensorManager.SENSOR_STATUS_ACCURACY_HIGH -> {

                        Toast.makeText(this,"Sensör yüksek doğrulukta çalışmaktadır ." , Toast.LENGTH_SHORT).show()
                }

                SensorManager.SENSOR_STATUS_ACCURACY_MEDIUM -> {

                        Toast.makeText(this,"Sensör orta doğrulukta çalışmaktadır ." , Toast.LENGTH_SHORT).show()
                }

                SensorManager.SENSOR_STATUS_ACCURACY_LOW -> {

                        Toast.makeText(this,"Sensör düşük doğrulukta çalışmaktadır ." , Toast.LENGTH_SHORT).show()
                }

                SensorManager.SENSOR_STATUS_UNRELIABLE -> {

                        Toast.makeText(this,"Sensör çok düşük doğrulukta çalışmaktadır ." , Toast.LENGTH_SHORT).show()
                }
            }
        }
    }

    override fun onPause() {
        super.onPause()

        sensorManager.unregisterListener( this )
    }

}

【问题讨论】:

  • 如果你想显示一个从 0 开始的数字,那么只需存储 希望它开始计数时的初始值,然后从每个新值中减去它(在同一天)在显示之前。
  • @GenerousBadger 对不起,我没听懂,你能不能描述得更详细些?
  • 如果你从 API 得到的数字是 512, 513, 514, ... 但你想显示 0, 1, 2, ... 那么只需记住(存储)第一个数字 ( 512)某处并在显示之前减去每次出现的数字。
  • 现在我明白了,谢谢,但我不知道该怎么做,但你在我的脑海中创造了一些想法,我会以某种方式处理它,谢谢

标签: android-studio kotlin android-sensors


【解决方案1】:

由于计步器传感器只有一个值,我找到了如下解决方案。我可能找到了临时解决方案

class MainActivity : AppCompatActivity() , SensorEventListener {

    private lateinit var  sensorManager : SensorManager

    private lateinit var  step_detector : Sensor

    var step = -1

    lateinit var txt : TextView

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

        sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager

        step_detector = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR)

        txt = findViewById(R.id.text1)
    }

    override fun onResume() {
        super.onResume()

        sensorManager.registerListener( this , step_detector , SensorManager.SENSOR_DELAY_NORMAL)
    }

    override fun onSensorChanged(event : SensorEvent?) {

        if ( event?.sensor == step_detector ) {

            step ++
        }

        txt.text = step.toString()
    }

    override fun onAccuracyChanged(sensor : Sensor?, accuracy : Int) {

        if (sensor == step_detector ) {

            when (accuracy) {

                SensorManager.SENSOR_STATUS_ACCURACY_HIGH -> {

                        Toast.makeText(this,"Sensör yüksek doğrulukta çalışmaktadır ." , Toast.LENGTH_SHORT).show()
                }

                SensorManager.SENSOR_STATUS_ACCURACY_MEDIUM -> {

                        Toast.makeText(this,"Sensör orta doğrulukta çalışmaktadır ." , Toast.LENGTH_SHORT).show()
                }

                SensorManager.SENSOR_STATUS_ACCURACY_LOW -> {

                        Toast.makeText(this,"Sensör düşük doğrulukta çalışmaktadır ." , Toast.LENGTH_SHORT).show()
                }

                SensorManager.SENSOR_STATUS_UNRELIABLE -> {

                        Toast.makeText(this,"Sensör çok düşük doğrulukta çalışmaktadır ." , Toast.LENGTH_SHORT).show()
                }
            }
        }
    }

    override fun onPause() {
        super.onPause()

        sensorManager.unregisterListener( this )
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-09
    • 1970-01-01
    • 2018-10-04
    相关资源
    最近更新 更多