Phonegap Accelerometer仅调用错误回调

时间:2011-12-20 10:48:58

标签: android cordova mobile

这是我的代码:

function onDeviceReady() {
    console.log("Device Ready");
    startWatch();

};

function startWatch() {

    // Update acceleration every 5 seconds
    var options = { frequency: 5000 };
    watchID = navigator.accelerometer.watchAcceleration(onSuccess, onError, options);
};



function onSuccess(acceleration){

    console.log('Acceleration X: ' + acceleration.x + 
       'Acceleration Y: ' + acceleration.y + 
       'Acceleration Z: ' + acceleration.z + 
       'Timestamp: '      + acceleration.timestamp);
};

function onError(){
    console.log("Acceleration Error occured");
};

我在2台Android手机(三星Galaxy Nexus GT-I9250,Android 4.0和华为Ideos X3,Android 2.3.3)上测试,从我的控制台输出我知道它们只调用错误回调,但为什么?

我无法在谷歌上找到原因,所以如果你有想法,请提供帮助。

3 个答案:

答案 0 :(得分:0)

您可能遇到时间问题。

您应该尝试在我的HTC Evo上成功运行的以下内容或发布您的整个应用程序:

<!DOCTYPE HTML>
<html>
  <head>
    <meta name="viewport" content="width=320; user-scalable=no" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <title>PhoneGap</title>
      <script type="text/javascript" charset="utf-8" src="phonegap-1.3.0.js"></script>
      <script type="text/javascript" charset="utf-8">


function onDeviceReady() {
    console.log("Device Ready");
    startWatch();

};

function startWatch() {

    // Update acceleration every 5 seconds
    var options = { frequency: 5000 };
    watchID = navigator.accelerometer.watchAcceleration(onSuccess, accelerometerError, options);
};



function onSuccess(acceleration){

    alert('Acceleration X: ' + acceleration.x + 
       'Acceleration Y: ' + acceleration.y + 
       'Acceleration Z: ' + acceleration.z + 
       'Timestamp: '      + acceleration.timestamp);
};

function accelerometerError(){
    alert("Acceleration Error occured");
};

function init() {
    document.addEventListener("deviceready", onDeviceReady, true);
}
</script>

  </head>
  <body onload="init();" id="stage" class="theme">

  </body>
</html>

答案 1 :(得分:0)

可能是因为你传入了watchAccelerometer()调用中不存在的引用吗?

您正在传入onError,但处理程序的名称是accelerometerError

答案 2 :(得分:0)

这是一个想法。我没有测试过这个(我的Mobile Dev机器在家里),但我发现你可能需要告诉Android设备你想在Android Manifest中使用加速度计。

<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true" />

您的清单XML文件中是否有该设置?