我的问题的解释需要一些背景信息,使问题有点长,所以请耐心等待。
ANE(Air Native Extension)由 3 部分组成,允许您使用设备特定功能的本机代码(我使用的是 android),访问这些本机代码功能并使它们可用于 Flex 移动应用程序的 actionscript 库,和 Flex 移动应用程序。
对于我的 ANE,我在从广播接收器扩展的 onReceive() 方法中获取互联网信息。现在该方法不会返回任何内容,所以当它完成后,我将它存储在一个全局变量中并发送一个事件,说明信息已准备好。
actionscript 接口监听这个事件,当它接收到它时,它会更新一个全局变量,然后还分派一个事件告诉 flex 移动应用程序信息已准备好。
因此,当 flex 移动应用程序得知它需要的信息已准备好时,它会进入并获取它。
如果解释不够清楚,这是我如何编码的示例:
NATIVE CODE:
public MyClass(AnotherClass v,FREContext c){
this.v = v;
this.c = c; //Will use c to dispatch event
}
onReceive(){
....code....
String x = "internet info"
AnotherClass.setGlobalVar(x);
c.dispatchStatusEventAsync("status", "internetInfoReady");
}
ACTIONSCRIPT INTERFACE CODE:
private var context:ExtensionContext;
var info:String;
public function Interface(){
context = ExtensionContext.createExtensionContext("id",null);
context.addEventListener(StatusEvent.STATUS,onStatus);
}
public function scan():void{
//calls function that runs asynchronously to get internet info
}
public function onStatus(event:StatusEvent):void{
if((event.level == "status") && (event.code="internetInfoReady")){
info=String(context.all("getInfo")); //function that retrieves value x in AnotherClass and returns it
dispatchEvent(new Event("internetInfoReady"));
}
}
public function getInfo():String{
return info;
}
FLEX MOBILE APP CODE:
<s:View ....
<fx:Script>
<![CDATA[
var a:Interface = new Interface();
protected function getInfo(event:MouseEvent):void{
a.scan();
test.addEventListener("internetInfoReady",onGetInfo);
}
protected function onGetInfo(evt:Event):void{
var info:String = "";
if(evt.type == "internetInfoReady"){
info = a.getInfo();
a.toast(info); //function that calls android built in toast commands
}
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:Button left="251" right="250" top="40" height="43" label="Get Info" click="getInfo(event)"
fontFamily="Arial" horizontalCenter="0"/>
该应用程序没有在我的设备上运行,我只想确保我正在正确调度事件。我创建了一个 android 应用程序,它使用已经编写的本机代码来显示在屏幕上获得的信息,这样我就可以确保这部分工作正常,所以我知道这不是问题所在。