在调用接口页面的<script>部分增加如下配置。
import sensor from '@system.sensor'
或
var sensor = require("@system.sensor")
接口 |
描述 |
|---|---|
监听重力感应数据。如果多次调用,仅最后一次调用生效。 |
|
取消监听重力感应数据。 |
|
监听罗盘数据。如果多次调用,仅最后一次调用生效。 |
|
取消监听罗盘数据。 |
|
监听距离感应数据。如果多次调用,仅最后一次调用生效。 |
|
取消监听距离感应数据。 |
|
监听光线感应数据。如果多次调用,仅最后一次调用生效。 |
|
取消监听光线感应数据。 |
|
监听计步传感器数据。如果多次调用,仅最后一次调用生效。 |
|
取消监听计步传感器数据,如果不主动调用会在快应用退出时自动取消监听。 |
描述
监听重力感应数据。如果多次调用,仅最后一次调用生效。
OBJECT参数
参数 |
类型 |
是否必填 |
说明 |
|---|---|---|---|
interval(1060+) |
string |
否 |
监听回调函数的执行频率,默认normal。
|
callback |
function |
是 |
重力感应数据变化后会回调此函数,5次每秒。 |
callback返回值:
参数 |
类型 |
说明 |
|---|---|---|
x |
Number |
x轴坐标。 |
y |
Number |
y轴坐标。 |
z |
Number |
z轴坐标。 |
示例代码
sensor.subscribeAccelerometer({
interval:"normal",
callback:function(ret){console.log("handling callback");}
})
描述
监听罗盘数据。如果多次调用,仅最后一次调用生效。
OBJECT参数
参数 |
类型 |
是否必填 |
说明 |
|---|---|---|---|
callback |
function |
是 |
罗盘数据变化后会回调此函数。 |
callback返回值:
参数 |
类型 |
说明 |
|---|---|---|
direction |
float |
面对的方向度数。 |
accuracy(1070+) |
number |
传感器当前的精度。
|
示例代码
sensor.subscribeCompass({
callback:function(ret){console.log("handling callback");}
})
描述
监听距离感应数据。如果多次调用,仅最后一次调用生效。
OBJECT参数
参数 |
类型 |
是否必填 |
说明 |
|---|---|---|---|
callback |
function |
是 |
距离感应数据变化后会回调此函数。 |
callback返回值:
参数 |
类型 |
说明 |
|---|---|---|
distance |
number |
手机距离,单位为cm。 |
示例代码
sensor.subscribeProximity({
callback:function(ret){console.log("handling callback");}
})
描述
监听光线感应数据。如果多次调用,仅最后一次调用生效。
OBJECT参数
参数 |
类型 |
是否必填 |
说明 |
|---|---|---|---|
callback |
function |
是 |
光线感应数据变化后会回调此函数。 |
callback返回值:
参数 |
类型 |
说明 |
|---|---|---|
intensity |
number |
光线强度,单位为lux。 |
示例代码
sensor.subscribeLight({
callback:function(ret){console.log("handling callback");}
})
描述
监听计步传感器数据。如果多次调用,仅最后一次调用生效。
OBJECT参数
参数 |
类型 |
是否必填 |
说明 |
|---|---|---|---|
callback |
function |
是 |
计步传感器数据变化后会回调此函数。 |
callback返回值:
参数 |
类型 |
说明 |
|---|---|---|
steps |
integer |
计步传感器当前累计记录的步数。每次手机重启,这个值就会从0开始重新计算。 |
示例代码
sensor.subscribeStepCounter({
callback: function (ret) {
console.error(ret.steps);
}
})
描述
取消监听计步传感器数据,如果不主动调用会在快应用退出时自动取消监听。
示例代码
sensor.unsubscribeStepCounter()
<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>
效果图如下:
