这是我的代码:
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)上测试,从我的控制台输出我知道它们只调用错误回调,但为什么?
我无法在谷歌上找到原因,所以如果你有想法,请提供帮助。
答案 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文件中是否有该设置?