繁体   English   中英

我有一些关于 step Counter Google fit API 的问题

[英]I have some problem about step Counter Google fit API

我目前正在尝试使用 Google Fit API。 我主要是通过遵循谷歌的文档。

下面是我的代码,它似乎有问题

我遇到的问题是它显示了我所有的步数。 我想今天返回我的应用程序步数。 此代码返回我550530 步。 我想显示今天的步数。

class MainActivity : AppCompatActivity(), OnDataPointListener,
    GoogleApiClient.ConnectionCallbacks,
    GoogleApiClient.OnConnectionFailedListener {
    private var authInProgress = false
    private var mApiClient: GoogleApiClient? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        if (savedInstanceState != null) {
            authInProgress = savedInstanceState.getBoolean(AUTH_PENDING)
        }
        mApiClient = GoogleApiClient.Builder(this)
            .addApi(Fitness.SENSORS_API)
            .addScope(Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE))
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build()

    }

    override fun onStart() {
        super.onStart()
        mApiClient!!.connect()
    }

    override fun onStop() {
        super.onStop()
        Fitness.SensorsApi.remove(mApiClient, this)
            .setResultCallback { status ->
                if (status.isSuccess) {
                    mApiClient!!.disconnect()
                }
            }
    }

    private fun registerFitnessDataListener(dataSource: DataSource, dataType: DataType) {
        val request = SensorRequest.Builder()
            .setDataSource(dataSource)
            .setDataType(dataType)
            .setSamplingRate(3, TimeUnit.SECONDS)
            .build()

        Fitness.SensorsApi.add(mApiClient, request, this).setResultCallback { status ->
            if (status.isSuccess) {
                Log.e("GoogleFit", "SensorApi successfully added")
            } else {
                Log.e(
                    "GoogleFit",
                    "adding status: " + status.statusMessage
                )
            }
        }
    }

    override fun onConnected(bundle: Bundle?) {
        val dataSourceRequest = DataSourcesRequest.Builder()
            .setDataTypes(DataType.TYPE_STEP_COUNT_CUMULATIVE)
            .setDataSourceTypes(DataSource.TYPE_RAW)
            .build()
        val dataSourcesResultCallback =
            ResultCallback<DataSourcesResult> { dataSourcesResult ->
                for (dataSource in dataSourcesResult.dataSources) {
                    if (DataType.TYPE_STEP_COUNT_CUMULATIVE == dataSource.dataType) {
                        registerFitnessDataListener(
                            dataSource,
                            DataType.TYPE_STEP_COUNT_CUMULATIVE
                        )
                    }
                }
            }
        Fitness.SensorsApi.findDataSources(
            mApiClient,
            dataSourceRequest
        )
            .setResultCallback(dataSourcesResultCallback)
    }

    override fun onConnectionFailed(connectionResult: ConnectionResult) {
        if (!authInProgress) {
            try {
                authInProgress = true
                connectionResult.startResolutionForResult(
                    this,
                    REQUEST_OAUTH
                )
            } catch (e: IntentSender.SendIntentException) {
                Log.e("GoogleFit", "sendingIntentException " + e.message)
            }
        } else {
            Log.e("GoogleFit", "authInProgress")
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        //++++++++
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == REQUEST_OAUTH) {
            authInProgress = false
            if (resultCode == Activity.RESULT_OK) {
                if (!mApiClient!!.isConnecting && !mApiClient!!.isConnected) {
                    mApiClient!!.connect()
                }
            } else if (resultCode == Activity.RESULT_CANCELED) {
                Log.e("GoogleFit", "RESULT_CANCELED")
            }
        } else {
            Log.e("GoogleFit", "requestCode NOT request_oauth")
        }
    }

    override fun onConnectionSuspended(i: Int) {}

    override fun onDataPoint(dataPoint: DataPoint) {
        for (field in dataPoint.dataType.fields) {
            val value = dataPoint.getValue(field)

            runOnUiThread {
                Toast.makeText(
                    applicationContext,
                    "Field: " + field.name + " Value: " + value,
                    Toast.LENGTH_SHORT
                ).show()
            }
        }
    }

    companion object {
        private const val REQUEST_OAUTH = 1
        private const val AUTH_PENDING = "auth_state_pending"
    }
}

代码返回550530 步,因为您使用的是DataType.TYPE_STEP_COUNT_CUMULATIVE ,CUMULATIVE 将返回步数数据作为自计数开始以来的总和,或者您可以从头开始说。

您可以使用DataType.TYPE_STEP_COUNT_DELTA它将为您提供每个数据点而不是所有数据点的总和。

您可以在DataType的文档中查看更多信息

快乐编码!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM