如何监听 ANE 发送的事件?
How to listen event dispatched from ANE?
标题如是说。
我的本机代码中有:
freContext.dispatchStatusEventAsync("myEvent","");
在 ane 的 as3 部分:
private static function onStatus( event:StatusEvent ):void {
if(event.code == MyEvent.EVENT_NAME){ // EVENT_NAME = "myEvent"
displayToast("dispatching event");
dispatcher.dispatchEvent(MyEvent(MyEvent.EVENT_NAME));
}
}
在我的 flex 应用程序中 (MyAppHomeView.mxml)
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
title="Home View"
initialize="createListener()">
<fx:Script>
<![CDATA[
protected function createListener():void{
MyANE.showDialogMessage("init");
addEventListener(MyEvent.EVENT_NAME,handleEvent);
}
protected function handleEvent(event:MyEvent):void{
MyANE.showDialogMessage("myEvent");
}
]]>
</fx:Script>
</s:View>
我得到了 "dispatching event" toast(这意味着本机代码部分工作正常),但没有 "myEvent" 对话框。我做错了什么?
感谢这里的 Organis 评论和 adobe 示例:https://github.com/nweber/SystemVolumeNativeExtension/blob/master/VolumeTest/src/VolumeTest.mxml 我设法解决了我的问题:
首先 MyAne class 必须扩展 EventDispatcher。
然后在 onStatus :
private function onStatus( event:StatusEvent ):void {
if(event.code == MyEvent.EVENT_NAME){ // EVENT_NAME = "myEvent"
displayToast("dispatching event");
dispatchEvent(new MyEvent(MyEvent.EVENT_NAME));
}
}
并在 mxml 中创建一个 MyANE 实例并对其调用 addEventListener。
<fx:Script>
<![CDATA[
var ane:MyANE = new MyANE();
protected function createListener():void{
MyANE.showDialogMessage("init");
ane.addEventListener(MyEvent.EVENT_NAME,handleEvent);
}
protected function handleEvent(event:MyEvent):void{
MyANE.showDialogMessage("myEvent");
}
]]>
</fx:Script>
标题如是说。
我的本机代码中有:
freContext.dispatchStatusEventAsync("myEvent","");
在 ane 的 as3 部分:
private static function onStatus( event:StatusEvent ):void {
if(event.code == MyEvent.EVENT_NAME){ // EVENT_NAME = "myEvent"
displayToast("dispatching event");
dispatcher.dispatchEvent(MyEvent(MyEvent.EVENT_NAME));
}
}
在我的 flex 应用程序中 (MyAppHomeView.mxml)
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
title="Home View"
initialize="createListener()">
<fx:Script>
<![CDATA[
protected function createListener():void{
MyANE.showDialogMessage("init");
addEventListener(MyEvent.EVENT_NAME,handleEvent);
}
protected function handleEvent(event:MyEvent):void{
MyANE.showDialogMessage("myEvent");
}
]]>
</fx:Script>
</s:View>
我得到了 "dispatching event" toast(这意味着本机代码部分工作正常),但没有 "myEvent" 对话框。我做错了什么?
感谢这里的 Organis 评论和 adobe 示例:https://github.com/nweber/SystemVolumeNativeExtension/blob/master/VolumeTest/src/VolumeTest.mxml 我设法解决了我的问题:
首先 MyAne class 必须扩展 EventDispatcher。 然后在 onStatus :
private function onStatus( event:StatusEvent ):void {
if(event.code == MyEvent.EVENT_NAME){ // EVENT_NAME = "myEvent"
displayToast("dispatching event");
dispatchEvent(new MyEvent(MyEvent.EVENT_NAME));
}
}
并在 mxml 中创建一个 MyANE 实例并对其调用 addEventListener。
<fx:Script>
<![CDATA[
var ane:MyANE = new MyANE();
protected function createListener():void{
MyANE.showDialogMessage("init");
ane.addEventListener(MyEvent.EVENT_NAME,handleEvent);
}
protected function handleEvent(event:MyEvent):void{
MyANE.showDialogMessage("myEvent");
}
]]>
</fx:Script>