Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 从ANE(空中本机扩展)向flex移动应用程序调度和处理事件_Apache Flex - Fatal编程技术网

Apache flex 从ANE(空中本机扩展)向flex移动应用程序调度和处理事件

Apache flex 从ANE(空中本机扩展)向flex移动应用程序调度和处理事件,apache-flex,Apache Flex,解释我的问题需要一些背景知识,这使得问题有点长,请耐心听我说 ANE(Air Native Extension)由三部分组成:允许您使用设备特定功能的本机代码(我使用的是android)、访问这些本机代码函数并使其可用于Flex mobile应用程序的actionscript库,以及Flex mobile应用程序 对于我的电子邮件,我使用从广播接收器扩展的onReceive()方法获取互联网信息。现在该方法不返回任何内容,所以当它完成后,我将其存储在一个全局变量中,并发送一个事件,说明信息已准备

解释我的问题需要一些背景知识,这使得问题有点长,请耐心听我说

ANE(Air Native Extension)由三部分组成:允许您使用设备特定功能的本机代码(我使用的是android)、访问这些本机代码函数并使其可用于Flex mobile应用程序的actionscript库,以及Flex mobile应用程序

对于我的电子邮件,我使用从广播接收器扩展的onReceive()方法获取互联网信息。现在该方法不返回任何内容,所以当它完成后,我将其存储在一个全局变量中,并发送一个事件,说明信息已准备就绪

actionscript接口侦听此事件,当它接收到它时,它更新一个全局变量,然后还发送一个事件,告诉flex mobile应用程序信息已准备就绪

因此,当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"/>
本机代码:
公共MyClass(另一个v类,FREC){
这个,v=v;
this.c=c;//将使用c来分派事件
}
onReceive(){
……代码。。。。
String x=“互联网信息”
另一类:setGlobalVar(x);
c、 dispatchStatusEventAsync(“状态”、“InternetFoready”);
}
ACTIONSCRIPT接口代码:
私有变量上下文:ExtensionContext;
var信息:字符串;
公共功能接口(){
context=ExtensionContext.createExtensionContext(“id”,null);
addEventListener(StatusEvent.STATUS,onStatus);
}
公用函数扫描():无效{
//调用异步运行以获取internet信息的函数
}
公共函数onStatus(事件:StatusEvent):无效{
如果((event.level==“status”)&&(event.code=“internetfoready”)){
info=String(context.all(“getInfo”);//在另一个类中检索值x并返回它的函数
调度事件(新事件(“InternetFoready”);
}
}
公共函数getInfo():字符串{
退货信息;
}
FLEX移动应用程序代码:


应用程序没有在我的设备上运行,我只想确保我正确地调度了事件。我创建了一个android应用程序,它使用已经编写的本机代码来显示屏幕上获得的信息,因此我可以确保该部分正常工作,我知道这不是问题所在

您的as3接口类必须
扩展EventDispatcher


我注意到一件奇怪的事情,以防扩展项目中的自定义事件

dispatchEvent(new CustomEvent(CustomEvent.CONSTANT, someData));
不触发事件,但

var ce:CustomEvent = new CustomEvent(CustomEvent.CONSTANT);
    ce.data = someData;
    dispatchEvent(ce);
很好