更新记录

1.0.0(2024-04-09)

陀螺仪、加速度传感器、摇一摇


平台兼容性

Vue2 Vue3
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.6.8,Android:4.4,iOS:9,HarmonyNext:不确定 × × × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序
× × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
× × × × × × × × ×

陀螺仪加速度传感器摇一摇

权限

  • Android权限

  "<uses-permission android:name=\"android.permission.VIBRATE\"/>"

接口


import {
    UTSShare
} from "@/uni_modules/wrs-uts-shake"
let share = new UTSShare()
  • 设置参数(仅支持iOS)

share.setParams({
    accelerometerUpdateInterval: 1
})
  • 开始监测陀螺仪

// 陀螺仪
if (this.isAndroid) {
    var params = {}
    // 4: 陀螺仪 1:加速度传感器 
    params.type = 4
    //  * 多久获取一次数据  
    // 0: SENSOR_DELAY_FASTEST 最快
    // 1: SENSOR_DELAY_GAME 适合游戏
    // 2: SENSOR_DELAY_UI 绘画UI
    // 3: SENSOR_DELAY_NORMAL 普通界面

    params.samplingPeriodUs = 2
    share.startSensor(params, (resp) => {
        // this.showMsg(JSON.stringify(resp))
        var sensorEvent = resp.sensorEvent
        if (sensorEvent) {
            if (sensorEvent.values.length >= 3) {
                var x = sensorEvent.values[0]
                var y = sensorEvent.values[1]
                var z = sensorEvent.values[2]

                var deltaX = x - this.x;
                var deltaY = y - this.y;
                var deltaZ = z - this.z;

                this.x = x
                this.y = y
                this.z = z
            }
        }
    })
} else {
    share.startGyroUpdates((resp) => {
        this.showMsg(JSON.stringify(resp))
        if (resp.data) {
            let y = resp.data.y
            let x = resp.data.x
            let z = resp.data.z
            this.x = x
            this.y = y
            this.z = z
        }

    })
}
  • 暂停监测陀螺仪

if (this.isAndroid) {
    var params = {}
    params.type = 4
    share.stopSensor(params)
} else {
    share.stopGyroUpdates()
}
  • 开始监测加速度传感器

// 加速度传感器
if (this.isAndroid) {
    var params = {}
    // 4: 陀螺仪 1:加速度传感器 
    params.type = 1
    //  * 多久获取一次数据  
    // 0: SENSOR_DELAY_FASTEST 最快
    // 1: SENSOR_DELAY_GAME 适合游戏
    // 2: SENSOR_DELAY_UI 绘画UI
    // 3: SENSOR_DELAY_NORMAL 普通界面

    params.samplingPeriodUs = 2
    share.startSensor(params, (resp) => {
        // this.showMsg(JSON.stringify(resp))
        var opt = resp.opt
        switch (opt) {
            // 值发生变化
            case "onSensorChanged":
                var sensorEvent = resp.sensorEvent
                if (sensorEvent) {
                    if (sensorEvent.values.length >= 3) {
                        var x = sensorEvent.values[0]
                        var y = sensorEvent.values[1]
                        var z = sensorEvent.values[2]

                        var deltaX = x - this.x;
                        var deltaY = y - this.y;
                        var deltaZ = z - this.z;

                        this.x = x
                        this.y = y
                        this.z = z

                        var GRAVITY_EARTH = 9.80665
                        var accelerameter = Math.sqrt(deltaX * deltaX + deltaY * deltaY +
                            deltaZ *
                            deltaZ) / GRAVITY_EARTH
                        // console.log("accelerameter:" + accelerameter)
                        if (accelerameter > 3.0) {
                            // 毫秒
                            var currentTime = Date.now()
                            if (this.lastShakeTime == 0) {
                                this.lastShakeTime = currentTime
                            } else {
                                var between = currentTime - this.lastShakeTime
                                if (between >= 1000) {
                                    console.log("accelerameter:" + accelerameter)
                                    this.shakeAction()
                                }
                                this.lastShakeTime = currentTime
                            }
                        }
                    }
                }
                break;
                // 精确度发生变化
            case "onAccuracyChanged":
                break;

            default:
                break;
        }
    })
} else {
    share.startAccelerometerUpdates((resp) => {
        this.showMsg(JSON.stringify(resp))
        if (resp.data) {
            let y = resp.data.y
            let x = resp.data.x
            let z = resp.data.z
            this.x = x
            this.y = y
            this.z = z
            let accelerameter = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2))
            // 
            if (accelerameter > 0.7) {
                // 毫秒
                var currentTime = Date.now()
                if (this.lastShakeTime == 0) {
                    this.lastShakeTime = currentTime
                } else {
                    var between = currentTime - this.lastShakeTime
                    if (between > 1000) {
                        console.log("accelerameter:" + accelerameter)
                        this.shakeAction()
                    }
                    this.lastShakeTime = currentTime
                }
            }
        }
    })
}
  • 暂停监测加速度传感器

if (this.isAndroid) {
    var params = {}
    params.type = 1
    share.stopSensor(params)
} else {
    share.stopAccelerometerUpdates()
}

隐私、权限声明

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

android: android.permission.VIBRATE ios: 无

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

插件不采集任何数据

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

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