为什么加速度计在英特尔XDK仿真器中运行,而不在设备上运行?

时间:2014-05-21 20:19:26

标签: android cordova accelerometer intel-xdk

我尝试使用英特尔XDK编写应用程序,允许您通过手机打开和关闭加速度计并记录测量结果。

它在英特尔XDK仿真器中按预期运行,但不能通过"测试"在设备上运行。或者作为内置的.apk文件。

XDK程序的加速度计演示在我的测试设备上正常运行,所以我很确定它不是我设备上的硬件问题。对此有任何想法将不胜感激。

虽然这可能是一个简单的问题,但是您是否需要为测试或构建启用加速度计?我知道构建选项包括添加/不添加摄像头,地理位置,联系人等,但我还没有看到加速度计的任何内容。我正在使用默认的" Android版本"并在我的index.html文件中加载以下脚本(这是在onDeviceReady()函数正下方的脚本标记中):

 js/appframework.ui.min.js"
 script src="intelxdk.js"
 script src="cordova.js"
 script src="js/accelerometer.js" (this is my file that has the JS referenced below.  The "o)

我想要做的是开始录制加速"按钮和"停止录制加速"按钮(与连续运行加速度计的示例相对应)。我能够让应用程序成功运行,停止然后再次启动的唯一方法是将intel.xdk.accelerometer.watchAcceleration(onsuccess, options);从onDeviceReady()函数移动到下面调用的函数" startWatch()&#34 ;。您是否必须在onDeviceReady()函数中运行与设备相关的函数?

以下是代码:

var acc_data = []; // Array containing X,Y,Z accelerometer objects
var watchID = null;

function startWatch() {
    // Start watching the acceleration
    // Update acceleration every .1 seconds
    var options = { frequency: 100, adjustForRotation: true };

    watchID = intel.xdk.accelerometer.watchAcceleration(onSuccess, options);
    var date = new Date();
    track_id = "Arm_Test "+ date;
    onSuccess;

}


// Success - Start watching accelerometer data
function onSuccess(acceleration) {

    acc_data.push(acceleration);

    var element2 = document.getElementById('arm_acc_test');
    element2.innerHTML = track_id;

    var element = document.getElementById('accelerometer');
    element.innerHTML = 'Acceleration X: ' + acceleration.x + '<br />' +
    'Acceleration Y: ' + acceleration.y + '<br />' +
    'Acceleration Z: ' + acceleration.z + '<br />' +
    'Timestamp: ' + acceleration.timestamp + '<br />';

}


// Stop watching the acceleration
function stopWatch() {

    intel.xdk.accelerometer.clearWatch(watchID);

    window.localStorage.setItem(track_id, JSON.stringify(acc_data));

    var element3 = document.getElementById('arm_acc_test');
    element3.innerHTML = "Test Complete";

    var element4 = document.getElementById('accelerometer');
    element4.innerHTML = "";

    for (var i=0, len = acc_data.length; i<len; i++) {
        var output = "x: " + acc_data[i]['x'] + "<br>" + "y: " + acc_data[i]['y'] + "<br>" + 
        "z: " + acc_data[i]['z'] + "<br>" + "timestamp: " + acc_data[i]['timestamp'] +
        "<br><br>";
        var element5 = document.getElementById('accelerometer');
        element5.innerHTML += output;

    }

}

1 个答案:

答案 0 :(得分:0)

看看我为了演示目的而放在一起的这个例子。它最终将成为一个样本。它为加速度计代码提供了更彻底的处理。你应该能够从中收集你需要的东西:

https://github.com/xmnboy/hello-cordova

您将在此文件中找到所需内容:

https://github.com/xmnboy/hello-cordova/blob/master/www/js/cordova-acc.js

它可以在XDK模拟器和iOS,Android(旧版,新版和Crosswalk版)和Win8手机版以及App预览版中构建的应用程序中正常运行。

要特别注意的一件事是,当您初始化加速计代码时,它必须在设备就绪事件之后发生。这个文件中有一些花哨的设备就绪检测代码:

https://github.com/xmnboy/hello-cordova/blob/master/www/js/init-dev.js

将准备好处理Cordova设备,并准备好XDK设备并在常规浏览器中运行。

最终,我会更新此应用,以便它也适用于HTML5设备动态API ...