我有一个 AIR 应用程序,它使用 native 扩展来创建用户浏览的一系列对话框。用户浏览对话框后,我需要 C/Objective-C 端通知 AIR 应用程序用户已完成并转发用户所做的一系列选择。
这可能吗?
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 中启动一个定时器,它会定期对 native 扩展执行 ping 操作,以检查用户是否已完成并获取值,但这看起来太乱了,我想我一定遗漏了一些明显的东西。
非常感谢任何帮助。谢谢!
最佳答案
您需要做的是从 native 代码分派(dispatch)“状态”事件,然后在您的 AS3 代码中监听它们。
因此,首先在您的 AS3 代码中为您的扩展上下文添加一个监听器:
context.addEventListener( StatusEvent.STATUS, onStatus);
private function onStatus( event:StatusEvent ):void
{
trace( "code = " + event.code );
trace( "level = " + event.level );
}
代码和级别变量是您可以从 native 代码传回的两个字符串。在您的 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
关于objective-c - AIR native 扩展 : Can I call ActionScript 3 method from C/Objective-C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19011695/