【问题标题】:Why does the accelerometer run in the Intel XDK emulator, but not on the device?为什么加速度计在英特尔 XDK 仿真器中运行,而不是在设备上运行?
【发布时间】:2014-05-21 20:19:25
【问题描述】:

我正在尝试使用英特尔 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()”的函数。是不是必须要有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;

    }

}

【问题讨论】:

    标签: android cordova accelerometer intel-xdk


    【解决方案1】:

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

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

    你会在这个文件中找到你需要的:

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

    它在 XDK 模拟器和为 iOS、Android(旧、新和 Crosswalk)和 Win8 手机以及应用预览构建的应用中正常工作。

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

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

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

    最后,我会更新这个应用程序,使它也可以与 HTML5 设备运动 api 一起使用...

    【讨论】:

    • 谢谢!我现在正在经历它,看起来这将解决挑战。
    猜你喜欢
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多