5

我是第一次进入 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 个 0 的数组。我已经测试了一些类似的功能并得到了相同的结果。我已经能够通过重新创建我需要的每个 SensorManager 函数并编辑该函数以便它返回变量来解决这个问题,但我想知道是否有任何方法可以解决这个问题,或者它是否只是超级循环的限制?重新制作只有细微差别的相同功能是浪费我的时间,所以我希望我只是错过了一些东西。

谢谢!

4

0 回答 0