Appcelerator Hyperloop Android - Как использовать определенные функции Sensor Manager, которые используют передачу по ссылочной структуре

Я впервые вхожу в Hyperloop, особенно для Android, и, хотя все идет довольно хорошо, у меня была одна проблема, которую я объясню ниже.

Я успешно смог получить дескриптор диспетчера датчиков и настроить событие прослушивателя датчика для получения значений от датчика.

Если кому-то нужен этот код, он ниже

var AndroidAppPkg = require('android.app.*');
var AndroidHardware = require('android.hardware.*');
var Context = require('android.content.Context');
var Sensor = AndroidHardware.Sensor;
var SensorEvent = AndroidHardware.SensorEvent;
var SensorEventListener = AndroidHardware.SensorEventListener;
var SensorManager = AndroidHardware.SensorManager;
var Activity = AndroidAppPkg.Activity;
var Matrix = require('android.opengl.Matrix');

var activity = new Activity(Titanium.App.Android.getTopActivity());
var appContext = activity.getApplicationContext();

var obj = appContext.getSystemService(Context.SENSOR_SERVICE);

var sensorManager = SensorManager.cast( obj );

var sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);

Ti.API.info('Set up sensor event');
var sensorEvent = new SensorEventListener({
    onSensorChanged:function(event){
        // sensor values retrieve here
    }
});

У меня проблемы с тем, как использовать функции Android Sensor Manager, которые включают передачу параметра по ссылке. Например SensorManager.remapCoordinateSystem(float[] inR, int X, int Y, float[] outR) включает в себя массив (матрица вращения).

Я попробовал этот подход

var outR = new Array(16).fill(0);
SensorManager.remapCoordinateSystem(inR, SensorManager.AXIS_X, SensorManager.AXIS_Z, outR);
Ti.API.info(outR.join());

Массив outR остается таким же, как и при инициализации, в данном случае это массив из 16 нулей. Я протестировал несколько похожих функций и получил тот же результат. Я смог обойти эту проблему, воссоздав каждую из необходимых мне функций SensorManager и отредактировав функцию так, чтобы она возвращала переменную, но мне было интересно, есть ли способ обойти это или это просто ограничение гиперцикличности? Это бесполезная трата моего времени на то, чтобы переделать те же функции с незначительным отличием, так что я надеюсь, что я что-то пропустил.

Спасибо!

0 ответов

Другие вопросы по тегам