Cordova cordova-plugin-device-motion 插件不调用回调
Cordova cordova-plugin-device-motion plugin not calling callback
我使用 Cordova CLI 创建我的项目,添加了插件 cordova-plugin-device-motion
然后按照简单教程尝试获取值
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
<!--<link rel="stylesheet" type="text/css" href="css/index.css">-->
<title>Rotations</title>
</head>
<body>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
<!--<script type="text/javascript" src="js/rotationHandler.js"></script>-->
<script type="text/javascript" charset="utf-8">
// The watch id references the current `watchAcceleration`
var watchID = null;
// Wait for device API libraries to load
//
//document.addEventListener("deviceready", onDeviceReady, false);
function onLoad() {
document.addEventListener("deviceready", onDeviceReady, false);
}
// device APIs are available
//
function onDeviceReady() {
console.log('OGDEBUG onDeviceReady');
startWatch();
}
// Start watching the acceleration
//
function startWatch() {
// Update acceleration every 1 seconds
var options = { frequency: 1000 };
try{
watchID = navigator.accelerometer.watchAcceleration(onSuccess, onError, options);
}catch(ex){
console.log('OGDEBUG startWatch error '+ex);
}
console.log('OGDEBUG startWatch');
}
// Stop watching the acceleration
function stopWatch() {
try{
if (watchID) {
navigator.accelerometer.clearWatch(watchID);
watchID = null;
}
}catch(ex){
console.log('OGDEBUG stopWatch error '+ex);
}
console.log('OGDEBUG stopWatch');
}
// onSuccess: Get a snapshot of the current acceleration
//
function onSuccess(acceleration) {
var accelerationString =
'Acceleration X: ' + acceleration.x + '\n' +
'Acceleration Y: ' + acceleration.y + '\n' +
'Acceleration Z: ' + acceleration.z + '\n' +
'Timestamp: ' + acceleration.timestamp + '\n';
console.log('OGDEBUG onSuccess '+accelerationString);
}
// onError: Failed to get the acceleration
//
function onError() {
alert('onError!');
console.log('OGDEBUG onError' );
}
function buttonTapStart() {
startWatch();
console.log('OGDEBUG buttonTap (index)');
}
function buttonTapStop() {
stopWatch();
console.log('OGDEBUG buttonTap (index)');
}
</script>
<div>
<button onclick="buttonTapStart()">Start Watch</button>
<button onclick="buttonTapStop()">Stop Watch</button>
</div>
</body>
</html>
我的 catch/error 日志语句的 None 被调用,所以它似乎工作正常(之前我收到 navigator
未定义但移动了一些东西,现在看起来很好).
然而,我的 onSuccess
回调从未被调用,知道为什么吗?
仅供参考:
cordova.js 和 js/index.js 都是未经编辑的生成文件,由 cli 创建(针对特定平台)
另请注意,我的 onDeviceReady
也从未被调用,但“开始监视”按钮确实调用了 startWatch
我也在使用 sensorsimulator-2.0-rc1 来伪造加速度计的值。无论如何(即使那不起作用,尽管我没有理由怀疑它确实起作用,并且它自己的测试工作)我认为我的 onSuccess 会被调用为 0 值。
经过大量故障排除和其他论坛的帮助后,我发现无法成功实现此功能。
但是我确实让我的 droid x 升级到了 4.4.4 并且能够在上面进行测试
并且有效
所以我现在有一个解决方案(代码在真实设备上工作)
我使用 Cordova CLI 创建我的项目,添加了插件 cordova-plugin-device-motion 然后按照简单教程尝试获取值
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
<!--<link rel="stylesheet" type="text/css" href="css/index.css">-->
<title>Rotations</title>
</head>
<body>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
<!--<script type="text/javascript" src="js/rotationHandler.js"></script>-->
<script type="text/javascript" charset="utf-8">
// The watch id references the current `watchAcceleration`
var watchID = null;
// Wait for device API libraries to load
//
//document.addEventListener("deviceready", onDeviceReady, false);
function onLoad() {
document.addEventListener("deviceready", onDeviceReady, false);
}
// device APIs are available
//
function onDeviceReady() {
console.log('OGDEBUG onDeviceReady');
startWatch();
}
// Start watching the acceleration
//
function startWatch() {
// Update acceleration every 1 seconds
var options = { frequency: 1000 };
try{
watchID = navigator.accelerometer.watchAcceleration(onSuccess, onError, options);
}catch(ex){
console.log('OGDEBUG startWatch error '+ex);
}
console.log('OGDEBUG startWatch');
}
// Stop watching the acceleration
function stopWatch() {
try{
if (watchID) {
navigator.accelerometer.clearWatch(watchID);
watchID = null;
}
}catch(ex){
console.log('OGDEBUG stopWatch error '+ex);
}
console.log('OGDEBUG stopWatch');
}
// onSuccess: Get a snapshot of the current acceleration
//
function onSuccess(acceleration) {
var accelerationString =
'Acceleration X: ' + acceleration.x + '\n' +
'Acceleration Y: ' + acceleration.y + '\n' +
'Acceleration Z: ' + acceleration.z + '\n' +
'Timestamp: ' + acceleration.timestamp + '\n';
console.log('OGDEBUG onSuccess '+accelerationString);
}
// onError: Failed to get the acceleration
//
function onError() {
alert('onError!');
console.log('OGDEBUG onError' );
}
function buttonTapStart() {
startWatch();
console.log('OGDEBUG buttonTap (index)');
}
function buttonTapStop() {
stopWatch();
console.log('OGDEBUG buttonTap (index)');
}
</script>
<div>
<button onclick="buttonTapStart()">Start Watch</button>
<button onclick="buttonTapStop()">Stop Watch</button>
</div>
</body>
</html>
我的 catch/error 日志语句的 None 被调用,所以它似乎工作正常(之前我收到 navigator
未定义但移动了一些东西,现在看起来很好).
然而,我的 onSuccess
回调从未被调用,知道为什么吗?
仅供参考:
cordova.js 和 js/index.js 都是未经编辑的生成文件,由 cli 创建(针对特定平台)
另请注意,我的 onDeviceReady
也从未被调用,但“开始监视”按钮确实调用了 startWatch
我也在使用 sensorsimulator-2.0-rc1 来伪造加速度计的值。无论如何(即使那不起作用,尽管我没有理由怀疑它确实起作用,并且它自己的测试工作)我认为我的 onSuccess 会被调用为 0 值。
经过大量故障排除和其他论坛的帮助后,我发现无法成功实现此功能。
但是我确实让我的 droid x 升级到了 4.4.4 并且能够在上面进行测试 并且有效
所以我现在有一个解决方案(代码在真实设备上工作)