Android开发Android开发经验谈Android技术知识

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

2020-05-07  本文已影响0人  不正经的创作者
  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 支持设置多种语言,语言设置是跟手机走的,比如要设置成日语,只需要把手机语言设置成日语,再重新连接手环,等手环下载更新结束就可以了。
上一篇 下一篇

猜你喜欢

热点阅读