Skip to content

Latest commit

 

History

History
132 lines (96 loc) · 4.5 KB

06.cordova-plugin-device-motion.md

File metadata and controls

132 lines (96 loc) · 4.5 KB

cordova-plugin-device-motion

这个插件是用于读取速度传感器的数据,速度感应器是用来监控设备在三围立体空间的位置信息比如_x_, y, z,和设备上传感器的类型,精确度息息相关。

通过navigator.accelerometer对象来访问该插件。而且是必须要等到deviceready触发以后才能够对accelerometer进行访问

    document.addEventListener("deviceready", onDeviceReady, false);
    function onDeviceReady() {
        console.log(navigator.accelerometer);
    }

安装

cordova plugin add cordova-plugin-device-motion

支持的平台

  • Amazon Fire OS
  • Android
  • BlackBerry 10
  • Browser
  • Firefox OS
  • iOS
  • Tizen
  • Windows Phone 8
  • Windows

方法

  • navigator.accelerometer.getCurrentAcceleration
  • navigator.accelerometer.watchAcceleration
  • navigator.accelerometer.clearWatch

对象

  • Acceleration

navigator.accelerometer.getCurrentAcceleration

获取当前的感应器数据_x_, y, z。这个数据通过accelerometerSuccess回调函数返回的acceleration参数返回。

    navigator.accelerometer.getCurrentAcceleration(accelerometerSuccess, accelerometerError);

例子

    function onSuccess(acceleration) {
        alert('Acceleration X: ' + acceleration.x + '\n' +
              'Acceleration Y: ' + acceleration.y + '\n' +
              'Acceleration Z: ' + acceleration.z + '\n' +
              'Timestamp: '      + acceleration.timestamp + '\n');
    }

    function onError() {
        alert('onError!');
    }

    navigator.accelerometer.getCurrentAcceleration(onSuccess, onError);

Android 注意

accelerometer受__SENSOR_DELAY_UI__影响,这个读取频率根据设备不同在20到60Hz之间,高处频率的__period__值会导致读取重复数据。

iOS 注意

  • iOS 没有当前位置的概念。

  • 你必须监听速度传感器,并且在一段间隔后拿到数据。

  • getCurrentAcceleration现在延迟调用了watchAccelerometer

navigator.accelerometer.watchAcceleration

定时查询当前Acceleration,每次查询结束后执行accelerometerSuccess,通过acceleratorOptions对象的frequency属性来设置延时,单位毫秒。

返回值watchid是用于navigator.accelerometer.clearWatch来停止监视活动的。

    var watchID = navigator.accelerometer.watchAcceleration(accelerometerSuccess,
                                                           accelerometerError,
                                                           accelerometerOptions);
  • accelerometerOptions: 一个包含如下属性的对象类型。
    • period: 请求调用的周期,单位毫秒(accelerometerSuccess被调用的间隔)。 (Number) (Default: 10000)

例子

    function onSuccess(acceleration) {
        alert('Acceleration X: ' + acceleration.x + '\n' +
              'Acceleration Y: ' + acceleration.y + '\n' +
              'Acceleration Z: ' + acceleration.z + '\n' +
              'Timestamp: '      + acceleration.timestamp + '\n');
    }

    function onError() {
        alert('onError!');
    }

    var options = { frequency: 3000 };  // Update every 3 seconds

    var watchID = navigator.accelerometer.(onSuccess, onError, options);

iOS 注意

这个函数的回调函数有时间间隔的要求,限制范围是40ms到1000ms,比如你设置3秒(3000ms),虽然会每隔1秒请求一次数据,但是success回调函数是每3秒才被调用一次。

navigator.accelerometer.clearWatch

停止对watchID指定的传感器Acceleration的监视。一定要在watchAcceleration使用。否则会造成资源泄露。

    navigator.accelerometer.clearWatch(watchID);
  • watchID: The ID returned by navigator.accelerometer.watchAcceleration.

例子

    var watchID = navigator.accelerometer.watchAcceleration(onSuccess, onError, options);

    // ... later on ...

    navigator.accelerometer.clearWatch(watchID);

Acceleration

包含Accelerometer在特定时间点的数据。Acceleration包含一个重力影响的值(9.81 m/s^2), 因此哪怕是你在一个纬度为0,0,0的水平面,返回的数据也会是_x_ y,_z_返回值' 0 ',' 0 ',' 9.81 '。

属性

  • x: 传感器x坐标的计数。 (in m/s^2) (Number)
  • y: 传感器y坐标的计数。 (in m/s^2) (Number)
  • z: 传感器z坐标的计数。 (in m/s^2) (Number)
  • timestamp: 毫秒为单位的时间戳。 (DOMTimeStamp)