У меня есть проблема с счетчиком шагов Google fit API - PullRequest
0 голосов
/ 28 февраля 2020

Я сейчас пытаюсь работать с Google Fit API. Я в основном следовал документации Google.

Ниже приведен код, который у меня, кажется, есть проблема

Проблема, с которой я столкнулся, заключается в том, что он показывает мне количество шагов. Я хочу вернуть мое приложение сегодня. этот код возвращает мне 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"
    }
}

1 Ответ

0 голосов
/ 29 февраля 2020

Код возвращает 550530 шагов , поскольку вы используете DataType.TYPE_STEP_COUNT_CUMULATIVE, CUMULATIVE вернет данные счетчика шагов в виде суммы с начала счета или вы можете сказать с начала.

Вы можете использовать DataType.TYPE_STEP_COUNT_DELTA, это даст вам каждую точку данных, а не сумму всех.

Вы можете проверить больше в документации от DataType

Happy Кодирование !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...