目录

传感器

接口声明

在manifest.json文件的 features属性中增加如下配置。

{"name": "system.sensor"}

导入模块

在调用接口页面的<script>部分增加如下配置。

import sensor from '@system.sensor'

或

var sensor = require("@system.sensor")

使用限制

限制条件

说明

适用终端

手机、平板

适用区域

全球

接口定义

接口

描述

sensor.subscribeAccelerometer(OBJECT)

监听重力感应数据。如果多次调用,仅最后一次调用生效。

sensor.unsubscribeAccelerometer()

取消监听重力感应数据。

sensor.subscribeCompass(OBJECT)

监听罗盘数据。如果多次调用,仅最后一次调用生效。

sensor.unsubscribeCompass()

取消监听罗盘数据。

sensor.subscribeProximity(OBJECT)

监听距离感应数据。如果多次调用,仅最后一次调用生效。

sensor.unsubscribeProximity()

取消监听距离感应数据。

sensor.subscribeLight(OBJECT)

监听光线感应数据。如果多次调用,仅最后一次调用生效。

sensor.unsubscribeLight()

取消监听光线感应数据。

sensor.subscribeStepCounter(OBJECT)

监听计步传感器数据。如果多次调用,仅最后一次调用生效。

sensor.unsubscribeStepCounter()

取消监听计步传感器数据,如果不主动调用会在快应用退出时自动取消监听。

[h2]sensor.subscribeAccelerometer(OBJECT)

描述

监听重力感应数据。如果多次调用,仅最后一次调用生效。

OBJECT参数

参数

类型

是否必填

说明

interval(1060+)

string

否

监听回调函数的执行频率,默认normal。

  • game:适用于更新游戏的回调频率,在 20ms/次 左右。
  • ui:适用于更新 UI 的回调频率,在 60ms/次 左右。
  • normal:普通的回调频率,在 200ms/次 左右。

callback

function

是

重力感应数据变化后会回调此函数,5次每秒。

callback返回值:

参数

类型

说明

x

Number

x轴坐标。

y

Number

y轴坐标。

z

Number

z轴坐标。

示例代码

sensor.subscribeAccelerometer({
  interval:"normal",
  callback:function(ret){console.log("handling callback");}
})

[h2]sensor.unsubscribeAccelerometer()

描述

取消监听重力感应数据。

示例代码

sensor.unsubscribeAccelerometer()

[h2]sensor.subscribeCompass(OBJECT)

描述

监听罗盘数据。如果多次调用,仅最后一次调用生效。

OBJECT参数

参数

类型

是否必填

说明

callback

function

是

罗盘数据变化后会回调此函数。

callback返回值:

参数

类型

说明

direction

float

面对的方向度数。

accuracy(1070+)

number

传感器当前的精度。

  • -1:数值不可信,传感器失去连接。
  • 0:数值不可信,原因未知。
  • 1:低精度。
  • 2:中等精度。
  • 3:高精度。

示例代码

sensor.subscribeCompass({
    callback:function(ret){console.log("handling callback");}
})

[h2]sensor.unsubscribeCompass()

描述

取消监听罗盘数据。

示例代码

sensor.unsubscribeCompass()

[h2]sensor.subscribeProximity(OBJECT)

描述

监听距离感应数据。如果多次调用,仅最后一次调用生效。

OBJECT参数

参数

类型

是否必填

说明

callback

function

是

距离感应数据变化后会回调此函数。

callback返回值:

参数

类型

说明

distance

number

手机距离,单位为cm。

示例代码

sensor.subscribeProximity({
  callback:function(ret){console.log("handling callback");}
})

[h2]sensor.unsubscribeProximity()

描述

取消监听距离感应数据。

示例代码

sensor.unsubscribeProximity()

[h2]sensor.subscribeLight(OBJECT)

描述

监听光线感应数据。如果多次调用,仅最后一次调用生效。

OBJECT参数

参数

类型

是否必填

说明

callback

function

是

光线感应数据变化后会回调此函数。

callback返回值:

参数

类型

说明

intensity

number

光线强度,单位为lux。

示例代码

sensor.subscribeLight({
  callback:function(ret){console.log("handling callback");}
})

[h2]sensor.unsubscribeLight()

描述

取消监听光线感应数据。

示例代码

sensor.unsubscribeLight()

[h2]sensor.subscribeStepCounter(OBJECT)(1045+)

描述

监听计步传感器数据。如果多次调用,仅最后一次调用生效。

OBJECT参数

参数

类型

是否必填

说明

callback

function

是

计步传感器数据变化后会回调此函数。

callback返回值:

参数

类型

说明

steps

integer

计步传感器当前累计记录的步数。每次手机重启,这个值就会从0开始重新计算。

示例代码

sensor.subscribeStepCounter({
    callback: function (ret) {
        console.error(ret.steps);
    }
})

[h2]sensor.unsubscribeStepCounter()(1045+)

描述

取消监听计步传感器数据,如果不主动调用会在快应用退出时自动取消监听。

示例代码

sensor.unsubscribeStepCounter()

Demo

<template>
  <!-- Only one root node is allowed in template. -->
  <div class="container">
    <div class="case-title mt-item">
      <text class="title">gravity sensor data</text>
    </div>
    <div class="info-container">
      <div class="info-item border-bottom-1">
        <text class="title">X</text>
        <div class="result">
          <text>{{accelerometerGetted ? accelerometerData.x : 'please get X coordinate'}}</text>
        </div>
      </div>
      <div class="info-item border-bottom-1">
        <text class="title">Y</text>
        <div class="result">
          <text>{{accelerometerGetted ? accelerometerData.y : 'please get Y coordinate'}}</text>
        </div>
      </div>
      <div class="info-item">
        <text class="title">Z</text>
        <div class="result">
          <text class="result">{{accelerometerGetted ? accelerometerData.z :'please get Z coordinate'}}</text>
        </div>
      </div>
    </div>
    <div class="mt-btn row-center">
      <text class="btn-transparent" onclick="startAccelerometer">Listens to gravity sensor data</text>
    </div>
    <div class="mt-btn row-center">
      <text class="btn-transparent" onclick="stopAccelerometer">Cancels listening to gravity sensor data</text>
    </div>
    <div class="case-title mt-item">
      <text class="title">compass data</text>
    </div>
    <div class="info-container">
      <div class="info-item">
        <text class="title">Direction</text>
        <div class="result">
          <text>{{compassGetted ? compassData.direction : 'please get direction '}}</text>
        </div>
      </div>
      <div class="info-item">
        <text class="title">Accuracy</text>
        <div class="result">
          <text>{{compassGetted ? compassData.accuracy : 'please get accuracy '}}</text>
        </div>
      </div>
    </div>
    <div class="mt-btn row-center">
      <text class="btn-transparent" onclick="startCompass">Listens to compass data</text>
    </div>
    <div class="mt-btn row-center">
      <text class="btn-transparent" onclick="stopCompass">Cancels listening to compass data</text>
    </div>
    <div class="case-title mt-item">
      <text class="title">light sensor data</text>
    </div>
    <div class="info-container">
      <div class="info-item">
        <text class="title">Light intensity</text>
        <div class="result">
          <text>{{lightGetted ? lightData : 'please get light intensity'}}</text>
        </div>
      </div>
    </div>
    <div class="mt-btn row-center">
      <text class="btn-transparent" onclick="startLight">Listens to light sensor data</text>
    </div>
    <div class="mt-btn row-center">
      <text class="btn-transparent" onclick="stopLight">Cancels listening to light sensor data</text>
    </div>
    <div class="case-title mt-item">
      <text class="title">step count</text>
    </div>
    <div class="info-container">
      <div class="info-item">
        <text class="title">Step Count</text>
        <div class="result">
          <text>{{stepGetted ? stepData : 'please get number of steps'}}</text>
        </div>
      </div>
    </div>
    <div class="mt-btn row-center">
      <text class="btn-transparent" onclick="startStepCounter">Listens to pedometer sensor data</text>
    </div>
    <div class="mt-btn row-center">
      <text class="btn-transparent" onclick="stopStepCounter">Cancels listening to pedometer sensor data</text>
    </div>
     <div class="case-title mt-item">
      <text class="title">distance sensor data</text>
    </div>
    <div class="info-container">
      <div class="info-item">
        <text class="title">distance</text>
        <div class="result">
          <text>{{distanceGetted ? distanceData : 'please get mobile phone distance'}}</text>
        </div>
      </div>
    </div>
    <div class="mt-btn row-center">
      <text class="btn-transparent" onclick="startProximity">Listens to distance sensor data</text>
    </div>
    <div class="mt-btn row-center">
      <text class="btn-transparent" onclick="stopProximity">Cancels listening to distance sensor data</text>
    </div>
  </div>
</template>

<style lang="sass">
.container {
  flex-direction: column;
  padding-bottom: 50px;
}
.case-title {
  margin-left: 32px;
  margin-right: 32px;
  margin-bottom: 20px;
  flex-direction: column;
}
.mt-item {
  margin-top: 40px;
}
.info-container {
  margin-left: 32px;
  margin-right: 32px;
  padding-right: 20px;
  padding-left: 20px;
  background-color: #fff;
  border-radius: 32px;
  flex-direction: column;
}
.border-bottom-1{
  border-bottom-width: 1px;
}
.info-container .info-item {
  height: 120px;
  border-bottom-color: rgba(0, 0, 0, 0.05);;
}
.info-container .info-item .title {
  flex-shrink: 0;
  font-size: 32px;
  color: rgba(0, 0, 0, 0.9);
}
.info-container .info-item .result {
  width: 100%;
  justify-content: flex-end;
  text-align: right;
  color: #999;
}
.mt-btn {
  margin-top: 32px;
}
.row-center {
  justify-content: center;
}
  .btn-transparent{
    height: 80px;
    color: #0a59f7;
    font-size: 32px;
    font-weight: 500;
  }
</style>

<script>
  import sensor from '@system.sensor';
  module.exports = {
    public: {
        accelerometerData:{
          x:'',
          y:'',
          z:''
        },
        compassData:{
          direction:'',
          accuracy:''
        },
        lightData:'',
        stepData:'',
        distanceData:'',
        accelerometerGetted:false,
        compassGetted:false,
        lightGetted:false,
        stepGetted:false,
        distanceGetted:false
    },
    onInit: function () {
      this.$page.setTitleBar({ text: 'sensor' });
    },
    startAccelerometer(){
      let that = this;
      sensor.subscribeAccelerometer({
        interval:"normal",
        callback: function (ret) { 
          that.accelerometerData = ret;
          that.accelerometerGetted = true;
        }
      })
    },
    stopAccelerometer(){
      sensor.unsubscribeAccelerometer();
    },
    startCompass(){
      let that = this;
      sensor.subscribeCompass({
        callback: function (ret) {
          that.compassData = ret;
          that.compassGetted = true;
        }
      })
    },
    stopCompass(){
      sensor.unsubscribeCompass();
    },
    startLight(){
      let that = this;
      sensor.subscribeLight({
        callback: function (ret) { 
          that.lightData = ret.intensity;
          that.lightGetted = true;
        }
      })
    },
    stopLight(){
      sensor.unsubscribeLight();
    },
    startStepCounter(){
      let that = this;
      sensor.subscribeStepCounter({
        callback: function (ret) { 
          that.stepData = ret.steps;
          that.stepGetted = true;
        }
      })
    },
    stopStepCounter(){
      sensor.unsubscribeStepCounter();
    },
    startProximity(){
      var that = this;
      sensor.subscribeProximity({
      callback:function(ret){
        console.log("handling callback");
        that.distanceData = ret.distance;
        that.distanceGetted = true;
        }
    })
    },
    stopProximity(){
      sensor.unsubscribeProximity()
    }
  }
</script>

效果图如下:

版本更新说明

版本

发布日期

描述

1070

2020-05-19

sensor.subscribeCompass回调函数新增accuracy参数,用于获取传感器的精度。

1060

2019-12-10

sensor.subscribeAccelerometer增加interval参数,以设定监听加速度数据回调函数的执行频率。

1050

2019-09-20

新增sensor.subscribeStepCounter和sensor.unsubscribeStepCounter,可监听和取消监听计步传感器数据。

相关链接

[h2]FAQ

如何全局监听步数变化?