如何获取Android 小米手环睡眠数据

作者: 不正经的创作者 | 来源:发表于2020-05-07 17:18 被阅读0次
  • 项目需求是获取使用者的睡眠数据,硬件使用的是Miband3,用小米手环3来获取用户的睡眠数据。因为小米并没有提供小米手环的接口供开发者来调用 ,所以得多一步周转环节,利用小米手环的配套运动App:小米运动(MiFit)关联到谷歌健康(GoogleFit)上,当MiFit同步到手环上的数据之后,便会将数据同步到GoogleFit上面,如此便能够利用GoogleFit 提供给开发者的请求接口,将需要的数据从GoogleFit上获得到。因为换了对日的新工作,保密性严格所以不能把完整的源码贴出来了,只记录根据官方的文档和Demo去集成的时候,关键需要注意的地方,像前期准备工作准备一个谷歌账号,开发者平台注册项目,设置凭据添加Fit 服务这种的就不多加赘述。
  1. GoogleFit开发者官网文档,提供的代码样例太老了,是过时的写法,是不能正常跑起来的

上图是写入睡眠的官方文档。当你想要获取睡眠数据,如果GoogleFit上面没有睡眠数据供使用,你需要造一条假数据insert到GoogleFit,官网的写法如上图,但是如果AndroidStudio照着写,会发现全是错,比如第一行的dataType已经改名成了:

  DataType.TYPE_ACTIVITY_SEGMENT

不仅如此,dataSet的装载也不是直接setValues的方式了,而是DataPoint的方式去装:

  DataSet activitySegments = DataSet.create(dataSource);
 
        DataPoint firstRunningDp = activitySegments.createDataPoint()
                .setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS);
        firstRunningDp.getValue(Field.FIELD_ACTIVITY).setActivity(FitnessActivities.SLEEP_LIGHT);
        activitySegments.add(firstRunningDp);

2.想读取小米的DataSet, SessionReadRequest要设置readSessionsFromAllApps(),把所有的拉取下来再判断,因为你不知道小米写入session的session name 是怎么命名的,不能像官网那样写成.setSessionName(SAMPLE_SESSION_NAME)。

3.拉取下来后会发现,虽然GoogleFit日志里只有一项睡眠记录,但是拉取下来小米的睡眠数据是根据睡眠段分的Session,一个Session对应一个睡眠段,比如下图所示session下标3到11就是属于睡眠的(这一步也解决了上一步关于session name的命名问题,由下图亦然可以知道session name 就是name字段的值),如果想计算睡眠总时间就得自己做一个判断了,取时间最早和最晚的睡眠session时间戳,睡眠阶段的code跟官方文档是一致的,如109浅睡眠,110深睡眠:

  1. MIband3只能记录夜间的睡眠数据,白天睡觉是不能识别的,官方如下回应:
  1. 查询的时间间隔要在sessionRequest前写明,比如想查询从昨天15:00到今天15:00的睡眠数据,可以如下写法:
  //查询时间范围
          Calendar cal = Calendar.getInstance();
          cal.setTime(now);
          hrOfDay = cal.get(Calendar.HOUR_OF_DAY);
          Log.e("hrOfDay", hrOfDay + "");
          cal.set(Calendar.HOUR_OF_DAY, 15);  //yesterday 15 is my start time.
          cal.set(Calendar.MINUTE, 0);
          cal.set(Calendar.SECOND, 0);
          cal.add(Calendar.DAY_OF_YEAR, -1);
          startTime = cal.getTimeInMillis();
 
          Calendar cal1 = Calendar.getInstance();
          cal1.setTime(now);
          cal1.set(Calendar.HOUR_OF_DAY, 15);  //15 is my end time.
          cal1.set(Calendar.MINUTE, 0);
          cal1.set(Calendar.SECOND, 0);
          endTime = cal1.getTimeInMillis();
 
          // Build a session read request
          SessionReadRequest readRequest = new SessionReadRequest.Builder()
                  .setTimeInterval(startTime, endTime, MILLISECONDS)
                  .read(DataType.TYPE_ACTIVITY_SEGMENT)
  //                .setSessionName(SAMPLE_SESSION_NAME)
                  .readSessionsFromAllApps()
                  .build();
  1. MiBand3 支持设置多种语言,语言设置是跟手机走的,比如要设置成日语,只需要把手机语言设置成日语,再重新连接手环,等手环下载更新结束就可以了。

相关文章

  • 如何获取Android 小米手环睡眠数据

    项目需求是获取使用者的睡眠数据,硬件使用的是Miband3,用小米手环3来获取用户的睡眠数据。因为小米并没有提供小...

  • 美好生活小贴士

    找到记录数据的APP来管理自己的健身、体重、睡眠、阅读等习惯。 keep +小米手环*滴墨书摘 IHour 微信读...

  • 小米手环2手机绑定教程

    相信不少用户已经拿到了心仪已久的小米手环2,那么如何绑定小米手环2呢,下面几张图来告诉你绑定小米手环2的具体步骤。...

  • 小米手环的审美分析

    此文来自:如何评价小米手环?中我的回答。 问:如何评价小米手环? 从价格和功能来看,还是不错的,到时考虑入一个。 ...

  • 时间管理第二十三天

    我现在用的小米手环,可以监测睡眠质量,深睡浅睡都有,可以用手环闹钟叫醒自己,不会像闹铃一样太响了。 好的睡眠,从好...

  • 日精进141天

    小米手环4搞丢了 重新准备了一个小米手环六 问题出现了 以前用4的时候 感觉自己的睡眠各方面都挺好的呀 可到六的时...

  • 一周行动清单&购置小物

    清明假期结束,一年也过去了四分之一。最近给自己买了小米手环蓝牙键盘和降噪耳机。 手环监测睡眠,每天深度睡眠可以达到...

  • 2022年WK4总结-断舍离

    2022的第4周复盘,关键词:断舍离 健康 早睡早起,小米手环数据直观,平均入睡11点27,睡眠时间6时36分。 ...

  • 小米8青春版获取root权限的教程

    小米8青春版能如何获取了Root超级权限?我们知道,Android手机有Root超级权限,如果手机获取了root相...

  • 瘦身打卡100天-第3天

    昨晚临睡称重63.2kg,今早起床称重62.8kg。昨晚只睡了不到5个小时(小米手环记录有7个小时,小米手环数据记...

网友评论

    本文标题:如何获取Android 小米手环睡眠数据

    本文链接:https://www.haomeiwen.com/subject/odgaghtx.html