2013-09-25 58 views
1

我有一個AIR應用程序,它使用本機擴展來創建用戶導航的一系列對話框。在用戶瀏覽完對話框之後,我需要C/Objective-C方面通知AIR應用程序用戶已完成並轉發用戶所做的一系列選擇。AIR本機擴展:我可以從C/Objective-C調用ActionScript 3方法嗎?

這可能嗎?

IE:在C/ObjC等效的

public function evokeMyASMethod(choice0:int,choice1:int):Boolean 
{ 
    // context opens the native extension to the AS3 side 
    var success:Boolean = context.call("myASMethod", choice0, choice1) as Boolean; 
    return success; 
} 

一種替代的解決方案是開始於ActionScript中的定時器,該定時器定期ping本機擴展以檢查用戶是否已經完成,並取這些值,但是,似乎太凌亂了,我想我一定會錯過一些明顯的東西。

任何幫助,非常感謝。謝謝!

+0

這是可能的。檢查這個原生擴展的源代碼:https://github.com/mateuszmackowiak/NativeDialogs – Pier

回答

3

你需要做的是從本地代碼中發送「狀態」事件,然後在你的AS3代碼中監聽它們。

所以在您的AS3代碼先添加一個偵聽到您的擴展上下文:

context.addEventListener(StatusEvent.STATUS, onStatus); 

private function onStatus(event:StatusEvent):void 
{ 
    trace("code = " + event.code); 
    trace("level = " + event.level); 
} 

的代碼和級別變量是兩個字符串,你可以從你的本機代碼回傳。在您的ObjC代碼,你將使用FREDispatchStatusEventAsync功能觸發事件回到你的AS3代碼:

FREDispatchStatusEventAsync(yourFreContext, (const uint8_t*)"code", (const uint8_t*)"level"); 

你只需要在您認爲合適改變「代碼」和「水平」的字符串,並對其進行處理你的onStatus處理程序。

點擊此處瞭解詳情:

http://help.adobe.com/en_US/air/extensions/WSb464b1207c184b143961a5e412937b5d5c6-7ffc.html http://help.adobe.com/en_US/air/extensions/WSb464b1207c184b14-62b8e11f12937b86be4-7ff5.html

+0

這很有效!謝謝 :) – Yippers

相關問題