Почему акселерометр работает в эмуляторе Intel XDK, а не на устройстве?

Я пытаюсь написать приложение с использованием Intel XDK, которое позволяет включать и выключать акселерометр через телефон и регистрировать сделанные измерения.

Он работает, как и ожидалось, в эмуляторе Intel 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;

    }

}

person user3662262    schedule 21.05.2014    source источник


Ответы (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 Phone, а также в режиме предварительного просмотра приложений.

Следует обратить особое внимание на то, что когда вы инициализируете код акселерометра, это должно происходить после события готовности устройства. В этом файле есть какой-то причудливый код обнаружения готовности устройства:

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

который будет обрабатывать готовое устройство Cordova и готовое устройство XDK, работающее в обычном браузере.

Со временем я обновлю это приложение, чтобы оно также работало с API движения устройства HTML5...

person xmnboy    schedule 22.05.2014
comment
БЛАГОДАРНОСТЬ! Я прохожу через это сейчас, и похоже, что это решит проблему. - person user3662262; 23.05.2014