如何在 AIR 到 Android Native 扩展中接收"长"数组?



我正在尝试为Android Vibration做一个本地扩展。我发现的每个开源扩展都只使用vibrate(duration),而不使用vibrate(pattern, repeat)vibrate.cancel()

我需要能够传递一个模式,并取消函数。

我能够让vibration(duration)正常工作,没有任何问题。有一个简单的args[1].getAsInt();方法供我使用。但是,没有.getAsArray.getAsLong

我发现了一种叫做FREArray的东西,但我真的不知道如何使用它

所以,我的问题是,使用AS3函数,我可以传递一个数组(带模式)和一个int(用于重复计数)。我如何在Android端接收数组?我收到重复的int没有任何问题。

这是我到目前为止一直在使用的内容,但由于错误,我似乎没有正确使用它。有什么建议吗?

  public FREObject call(FREContext context, FREObject[] args) {

                VibrateExtensionContext vibrate(pattern, repeat)ExtensionContext) context;
                long[] pattern;
                int repeat = 0;
                try {
                    pattern = FREArray.newArray(args[0]); //this is where im stuck
                    //it would be ideal if there was something like this..
                    //pattern = args[0].getAsLong(); but this doesnt exist
                    repeat = args[1].getAsInt(); //this works fine
                } catch (IllegalStateException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (FRETypeMismatchException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (FREInvalidObjectException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (FREWrongThreadException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                vibExtContext.androidVibrator.vibrate(pattern, repeat);
                return null;
            }

您只能访问double或int,它们相当于ActionScript端的Number和int对象。要读取从AS传递的数组,您需要执行以下操作:

try
{
    FREArray array = (FREArray)args[0];
    long[] pattern = new long[(int)array.getLength()];
    for (int i = 0; i < array.getLength(); i++)
    {
        FREObject object = array.getObjectAt(i);
        double number = object.getAsDouble(); 
        // use number - assuming you are okay truncating the decimal points
        pattern[i] = (long)number;
    }       
}
catch (Exception e)
{
}

最新更新