Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Google Fit API:存储心率bmp数据点

Google Fit API:存储心率bmp数据点
EN

Stack Overflow用户
提问于 2018-08-28 14:28:30
回答 1查看 2K关注 0票数 2

我正在尝试在我的应用程序中实现Google Fit,但我在存储心率bpm数据点的许可方面遇到了问题。一开始,我只尝试插入活动、速度、距离和步速数据,这样就行了。但是,一旦我添加了心率、bpm权限和数据点,我就从api中得到了一个错误5000。

以下是我请求的适合性权限:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FitnessOptions.builder()
.addDataType(DataType.TYPE_ACTIVITY_SEGMENT, FitnessOptions.ACCESS_WRITE)
.addDataType(DataType.TYPE_SPEED, FitnessOptions.ACCESS_WRITE)
.addDataType(DataType.TYPE_DISTANCE_CUMULATIVE, FitnessOptions.ACCESS_WRITE)
.addDataType(DataType.TYPE_STEP_COUNT_CUMULATIVE, FitnessOptions.ACCESS_WRITE)
.addDataType(DataType.TYPE_HEART_RATE_BPM, FitnessOptions.ACCESS_WRITE)
.build();

然后,当我尝试用DataType TYPE_HEART_RATE_BPM存储DataSet时,使用会话应用程序接口,我发现了错误5000。

我还尝试在Google Fit应用程序中完全删除我的应用程序的权限,然后再次添加权限,但我仍然收到错误。是否需要额外的权限才能存储心率数据?或者只允许读取心率数据?

EN

回答 1

Stack Overflow用户

发布于 2018-08-31 05:32:50

我之前曾使用Google fit获取心率数据。最初,我也遇到过同样的问题。如果您阅读以下链接https://developers.google.com/android/reference/com/google/android/gms/fitness/data/DataType.html#TYPE_HEART_RATE_BPM中的文档

很清楚地提到,您需要获得BODY_SENSORS权限

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"Registering to, or subscribing to data of this type requires BODY_SENSORS"

如果用户没有授予BODY_SENSORS权限,那么我们将收到错误消息,因为我们将无法访问或插入心率数据。

您可以使用以下代码请求用户授予权限

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ActivityCompat.requestPermissions(context, new String[]{Manifest.permission.BODY_SENSORS},
                            BODY_SENSOR_PERMISSION_REQUEST_CODE);

您可以在'onRequestPermissionsResult‘回调中检查用户是否已授予权限,然后请求心率数据。

根据请求添加示例代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{android.Manifest.permission.BODY_SENSORS},
                        BODY_SENSOR_PERMISSION_REQUEST_CODE);
            }



private class InsertAndVerifyDataTask extends AsyncTask<Void, Void, Void> {
        protected Void doInBackground(Void... params) {
            // Create a new dataset and insertion request.
            DataSet dataSet = insertHeartData();
            // [START insert_dataset]
            // Then, invoke the History API to insert the data and await the result, which is
            // possible here because of the {@link AsyncTask}. Always include a timeout when calling
            // await() to prevent hanging that can occur from the service being shutdown because
            // of low memory or other conditions.
            com.google.android.gms.common.api.Status insertStatus =
                    Fitness.HistoryApi.insertData(connectFit.returnClient(), dataSet)
                            .await(1, TimeUnit.MINUTES);
            // Before querying the data, check to see if the insertion succeeded.
            if (!insertStatus.isSuccess()) {
                return null;
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            Toast.makeText(MainActivity.this, "Added", Toast.LENGTH_SHORT).show();
        }
    }

private DataSet insertHeartData() {
        // [START build_insert_data_request]

        try {
            Calendar cal = Calendar.getInstance();
            Date now = new Date();
            cal.setTime(now);
            long endTime = cal.getTimeInMillis();
            cal.add(Calendar.HOUR_OF_DAY, -1);
            long startTime = cal.getTimeInMillis();
            // Create a data source
            DataSource dataSource = new DataSource.Builder()
                    .setAppPackageName(this)
                    .setDataType(DataType.TYPE_HEART_RATE_BPM)
                    .setStreamName(" - heart count")
                    .setType(DataSource.TYPE_DERIVED)
                    .build();
            // Create a data set
            float hearRate = Float.parseFloat(((EditText) (findViewById(R.id.heartRate))).getText().toString().trim());
            DataSet dataSet = DataSet.create(dataSource);
            // For each data point, specify a start time, end time, and the data value -- in this case,
            // the number of new steps.
            DataPoint dataPoint = dataSet.createDataPoint()
                    .setTimeInterval(startTime, endTime, MILLISECONDS);
            dataPoint.getValue(Field.FIELD_BPM).setFloat(hearRate);
            dataSet.add(dataPoint);
            // [END build_insert_data_request]
            return dataSet;
        } catch (Exception e) {
            return null;
        }
    }

这对我很有效。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52060321

复制
相关文章
GitHub 更新:更新 timeline & 相似项目推荐
一大早在微信群里,听说 GitHub 更新了,打开电脑一看果然是更新了。首页的动态发生了一些变化: 这一下子,能看到的东西比以前更少了。每天要涨那么多 star 的我,有点纠结。 与此同时,开始为您推
Phodal
2018/01/29
1.5K0
Detection-Timeline
版权声明:转载请注明出处 https://blog.csdn.net/JNingWei/article/details/80050966
JNingWei
2018/09/27
7530
Detection-Timeline
谷歌新产品:Music Timeline
自从Google Play整合音乐服务以来,Google掌握了越来越多用户选择音乐喜好的数据。相对于一些利用自己的数据发布流行音乐风向标的音乐服务商,Google的做法要有趣的多:根据Google Research博客的消息,Google于1月17日发布了一个可视化的动态网页产品——Music Timeline。通过它,用户可以查看,随着年代的变迁,哪些类型的音乐更受用户的欢迎,哪些歌手曾经风靡一时。 在Music Timeline图表上,每一种颜色的条纹代表一种类型的音乐,而条
大数据文摘
2018/05/18
9140
为什么Github上找不到Docker的源码
Docker最初是dotCloud公司Solomon Hykes在法国期间发起的一个公司内部项目。2013.3月以 Apache 2.0协议开源。
运维部落
2020/04/27
4.1K0
github常用的api接口
功能 api地址 请求方式 请求参数 返回参数 获取用户信息 https://api.github.com/users/ get path路径: 用户名 一个用户对象 获取用户所有仓库 https://api.github.com/users/{用户名}/repos get path路径: 用户名 返回一个数组 获取某个仓库的详细信息 https://api.github.com/repos/{用户名}/{仓库名} get path路径: 用户名 和 仓库名 返回一个仓库对象 获取某个仓库里根目录文件或文
await
2021/09/09
5.8K0
Github GraphQL API - Data Integration
See @octokit/request for full documentation of the .request method.
szhshp
2022/09/21
3120
import win32api 找不到指定程序_win32api python
使用环境是win7+Python3.4,32位,下载地址:https://sourceforge.net/projects/pywin32/files/pywin32/Build%20220/
全栈程序员站长
2022/11/07
2.8K0
import win32api 找不到指定程序_win32api python
【Presto Profile系列】Timeline使用
我们在Presto页面,可以通过“Splits”标签页查看整个查询的Timeline信息,如下所示:
skyyws
2022/09/01
7480
【Presto Profile系列】Timeline使用
Apache Hudi Timeline Server介绍
Hudi 不依赖任何外部第三方服务(如 Zookeeper),因此易于操作。一切都是独立的,并且不存在必须长期运行的服务器组件。启动一个 Spark 集群,摄取一批数据,一切都完全关闭(如果摄取模式是批处理)。但有时,拥有中央服务可能有助于提高表操作效率。因此 Hudi 有一个中央时间线服务器,它与 Driver 程序节点中的主线程一起运行,以协助定期写入和表服务。本文介绍时间线服务器的内容、它解决什么问题以及它如何使一些核心 Hudi 操作受益。
ApacheHudi
2023/09/04
3540
Apache Hudi Timeline Server介绍
使用curl操作github API V
前面两节侧重于理论上介绍,因为有这些理论上的准备,后面的应用才可以得心应手。因为现在的基础安全库包括算法实际上大部分都已经实现了,并且都是免费的,所以掌握基本原理加上灵活运用就可以了。上一节还就SSL的实现作了一些简单介绍,SSL虽然是一个协议,但实际上大部分使用的时候都是Openssl的实现,因此差不多就当成一个应用了。另外Openssl也实现了许多基础的加密解密算法,因此,现在基于openssl实现如SSH,HTTPS等安全工具非常方便。这一点后面再继续讲述。但这里再附带介绍其它几种常用安全工具,SSH和IPSEC Racoon.
py3study
2020/01/08
6770
chrome开发者工具-Timeline
最近发现,许多前端开发人员(包括作者我哈),对chrome的开发者工具中的使用并不是特别深入,而本文时对chrome开发者工具Timeline的一个讲解。
IMWeb前端团队
2019/12/04
2.4K0
chrome开发者工具-Timeline
【译】Profiling Flutter Applications Using the Timeline
使用Timeline可以查找和解决应用程序中的特定性能问题。它也是一个很好的工具,可以识别出Flutter所提供的所有特性的相对性能成本,并允许您做出更明智的决定,确定哪些地方需要避免某些特性,哪些地方需要使用可能会让您的应用程序脱颖而出的效果 .
老码小张
2020/02/26
2.4K0
【译】Profiling Flutter Applications Using the Timeline
页面性能优化的利器 — Timeline
本文介绍了如何定位和分析Web性能问题中的重绘(Repaint)问题,通过介绍和实例分析,提供了在Timeline中查看和定位重绘问题的方法,以及通过Paint Profiler分析绘制细节,从而优化页面性能。
陈泽钦
2017/04/12
6.8K3
页面性能优化的利器 — Timeline
Unity Cinemachine & Timeline 制作镜头动画
Cinemachine是Unity官方推出的一套相机管理解决方案,配合Timeline使用可以实现电影级别的分镜镜头,下面以一个车子移动的例子简单介绍Cinemachine和Timeline的配合使用。
CoderZ
2022/08/29
2K0
Unity Cinemachine & Timeline 制作镜头动画
chrome开发者工具-Timeline
该文介绍了如何使用Chrome浏览器的Timeline功能来分析前端页面的性能,包括内存泄漏、CPU使用率、网络请求、渲染时间、内存变化等。通过在页面上进行操作,可以查看不同时间段内各项性能指标的变化情况。同时,还可以利用Timeline来找出内存泄漏等问题,从而优化前端性能。
IMWeb前端团队
2017/12/29
2.1K0
chrome开发者工具-Timeline
Hudi Timeline(时间轴)分析
Hudi维护着一条对Hudi数据集所有操作的不同 Instant组成的 Timeline(时间轴),通过时间轴,用户可以轻易的进行增量查询或基于某个历史时间点的查询,这也是Hudi对外提供基于时间点查询的核心能力之一,本篇将详细介绍 Timeline。
ApacheHudi
2021/04/13
3.7K0
【React】【案例】:TimeLine 时间轴
目录 1. 组件基础 2. 需求分析 3. 关键技术 4. 代码实现 5. 形态展示 1. 组件基础 可视化地呈现时间流信息。 2. 需求分析 3. 关键技术 为什么不直接用 antd、elementui、iview 等开源组件? antd 很优秀,但是.... antd 不支持 label、content 按指定比例分布; antd 在dot定制时,难以控制UI界面呈现; elementui 不能将 label 放在左边; .... 但是以 antd 为基础改造,会快很多; 主体采用什么html结构实
WEBJ2EE
2020/04/21
8.1K0
【React】【案例】:TimeLine 时间轴
搬运一个 timeline 的应用 idea
创意来自于 github 上的用户 Zacknero,用 timeline 实现地铁报站图,他发了个 issue ,我刚好看到贡献了一丁点思路,所以厚着脸皮给大家转发一下
ZXand618
2022/04/10
3880
搬运一个 timeline 的应用 idea
SharePoint 中时间轴 Timeline的实现
客户需要在OA中实现每日动态功能,能够记录每一位员工的每天的工作动态,我很快想到了时间轴,因为时间轴能很直观的现实员工每一刻的动态。就像Facebook的Timeline效果(点击查看)。 尝试着搜
用户1161731
2018/01/11
2.4K0
SharePoint 中时间轴 Timeline的实现
Unity3D高级开发-TimeLine(黑科技)
Timeline是Unity2017版本中的电影序列工具,可用于制作电影内容、过场动画、游戏过程序列以及复杂的粒子系统等等
孙寅
2020/06/02
1.9K0

相似问题

HTML5上传文件

10

HTML5 -限制文件上传

37

Ajax文件上传(HTML5)

22

HTML5 AJAX多文件上传

12

上传多个文件HTML5 / PHP

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文