我正在尝试为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;
}
答案 0 :(得分:2)
您只能访问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)
{
}