1、参考原文:https://www.cnblogs.com/837634902why/p/12174228.html (原文使用的是java编写,这里改为Kotlin)
2、布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv_step"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="走一走,看看有什么"
android:textSize="20sp" />
</LinearLayout>
3、Activity文件:
import android.app.Activity
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.widget.TextView
class HomeActivity: Activity() {
private var mStepTV: TextView? = null
private var mSensorManager: SensorManager? = null
private var mListener: MySensorEventListener? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_home)
mStepTV = findViewById(R.id.tv_step)
mSensorManager = getSystemService(SENSOR_SERVICE) as SensorManager
mListener = MySensorEventListener()
}
override fun onResume() {
super.onResume()
mSensorManager!!.registerListener(mListener, mSensorManager!!.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR),
SensorManager.SENSOR_DELAY_NORMAL)
mSensorManager!!.registerListener(mListener, mSensorManager!!.getDefaultSensor(Sensor.TYPE_STEP_COUNTER),
SensorManager.SENSOR_DELAY_NORMAL)
}
override fun onPause() {
super.onPause()
mSensorManager!!.unregisterListener(mListener)
}
inner class MySensorEventListener : SensorEventListener {
var mStepDetector: Int = 0 // 自应用运行以来STEP_DETECTOR检测到的步数
var mStepCounter: Int = 0 // 自系统开机以来STEP_COUNTER检测到的步数
override fun onSensorChanged(event: SensorEvent) {
println(TAG+"==>" + event.sensor.type + "--" + Sensor.TYPE_STEP_DETECTOR + "--" + Sensor.TYPE_STEP_COUNTER)
if (event.sensor.type == Sensor.TYPE_STEP_DETECTOR) {
if (event.values[0] == 1.0f) {
mStepDetector++
}
} else if (event.sensor.type == Sensor.TYPE_STEP_COUNTER) {
mStepCounter = event.values[0].toInt()
}
val desc = String.format("设备检测到您当前走了%d步,自开机以来总数为%d步", mStepDetector, mStepCounter)
mStepTV?.text = desc
Log.d(TAG,"==>$desc")
}
override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) {}
}
companion object{
const val TAG = "HomeActivity"
}
}