平台兼容性

Android iOS
×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


DC-Pedometer

基于 iOS 系统的 CMPedometer 实现的 uni-app 计步器插件,数据精确,并且支持查询历史7天内的数据。

iPhone 实现计步的原理

这里简单说明一下 iPhone 计步的实现原理,iPhone 设备内置的加速感应器与陀螺仪等一类传感器可以检测手机当前是处于静止还是运动状态,并记录运动中产生的数据,通过一些算法即可估算出我们走路的步数和距离。 从 iPhone5s 开始手机中新增了M协处理器,它的作用就是可以在消耗很低的电量的情况下,记录手机上传感器获得的数据。

使用教程

插件集成方法

参考教程

权限描述

此插件需要访问运动与健身权限,请在你的uni项目的manifest.json -> App模块权限配置 -> 运动与健身(NSMotionUsageDescription) 填写权限使用描述

引用方式

const pedometer = uni.requireNativePlugin('DC-Pedometer')

API

- 查询设备是否支持计步器

isAvailable()

参数
返回值
属性 类型 说明
同步返回结果 Boolean 返回设备是否支持计步器


- 开始计步

从当前时间开始计步
注意:回调方法会根据运动状态时时返回运行数据,间隔大约3秒左右,不可修改,如果想停止回调方法,请调用停止计步器方法;

startPedometer(callback)

参数
返回值

callback {function (result)} 回调方法 result {PedometerData}
PedometerData {Object}

属性 类型 说明
steps Int 步数
distance Float 估算的距离,单位(m)
floorsAscended Int 步行楼梯上楼层数
floorsDescended Int 步行楼梯下楼层数
currentPace Float 当前的速度,单位(m/s)注:iOS 9含之后,并且当此值存在时才会返回
currentCadence Float 步频,单位(步/s) 注:iOS 9含之后,并且当此值存在时才会返回
averageActivePace Float 平均速度,单位(m/s)注:iOS 10含之后,并且当此值存在时才会返回


- 暂停计步

下次开始会接着上次数据继续记录

pausePedometer()

参数
返回值


- 停止计步

停止本次计步事件,下次调用开始计步会从0开始计算

stopPedometer()

参数
返回值


- 根据时间段查询计步器数据

可以查询7天内计步器数据,注意时间格式精确到秒

queryPedometerData(options,callback)

参数

options {Object}

属性 类型 必选 说明
start String 开始时间 格式:"YYYY-MM-dd HH:mm:ss" 例:2019-01-01 00:00:00
end String 结束时间 格式:"YYYY-MM-dd HH:mm:ss" 例:2019-01-02 00:00:00
返回值
  • PedometerData {Object} 同开始计步返回格式
示例

可将示例代码直接复制到 uni-app 的 .vue 中运行查看效果

<template>
    <view>
        <page-head :title="title"></page-head>
        <view class="uni-padding-wrap">
            <view class="uni-btn-v uni-common-mt">
                <button type="primary" @tap="isAvailable">是否支持计步器</button>
                <button type="primary" @tap="startPedometer">开始计步</button>
                <button type="primary" @tap="pausePedometer">暂停计步</button>
                <button type="primary" @tap="stopPedometer">停止计步</button>
                <button type="primary" @tap="queryPedometerData">获取昨日数据</button>
            </view>
            <view class="uni-textarea">
                <textarea v-model="tranMsg" />
                </view>
        </view>
    </view>
</template>
<script>
    const pedometer = uni.requireNativePlugin('DC-Pedometer');
    export default {
        data() {
            return {
                title: '计步器',
                tranMsg:''
            }
        },
        methods: {
            // 是否支持计步器
            isAvailable() {
                var avaliable = pedometer.isAvailable();
                console.log(avaliable);
            },
            // 开始计步
            startPedometer() {
                pedometer.startPedometer(ret => {
                    this.tranMsg = JSON.stringify(ret);
                });
            },
            // 暂停计步
            pausePedometer() {
                pedometer.pausePedometer();
            },
            // 停止计步
            stopPedometer() {
                pedometer.stopPedometer();
            },
            // 查询 2019-01-20 日数据
            queryPedometerData(){
                pedometer.queryPedometerData({
                    start: "2019-01-20 00:00:00",
                    end: "2019-01-21 00:00:00"
                }, ret => {
                    this.tranMsg = JSON.stringify(ret);
                });
            }
        }
    }
</script>

<style>

</style>

隐私、权限声明

1. 本插件需要申请的系统权限列表:

运动与健身(NSMotionUsageDescription)

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件本身不会收集任何数据,注意:在提交App Store时记得在隐私权限中说明一下数据用途;

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

作者未提供license.md

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问