微信咨询
返回顶部

您目前所在位置 : 资讯  > 资讯详情

小米手环睡眠数据获取

  项目需求是获取使用者的睡眠数据,硬件使用的是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深睡眠:




    4.   MIband3只能记录夜间的睡眠数据,白天睡觉是不能识别的,官方如下回应:




  5. 查询的时间间隔要在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();

6. MiBand3 支持设置多种语言,语言设置是跟手机走的,比如要设置成日语,只需要把手机语言设置成日语,再重新连接手环,等手环下载更新结束就可以了。

————————————————

版权声明:本文为CSDN博主「Crystal_xing」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Crystal_xing/article/details/89487139