我有2个AIR应用程序(A
和B
)能够通过LocalConnection
对象进行通信。我已经确认消息肯定是正确发送/接收的。
我希望能A
告诉B
来到前线。两个应用程序都是全屏:
stage.fullScreenSourceRect = new Rectangle(0, 0, 1080, 1920);
stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
我已经尝试了几种排列,但到目前为止似乎没有任何效果。
private function initSlave(channel: String): void {
conn = new LocalConnection();
conn.client = {
'activateSlave': activateSlave
};
conn.allowDomain("*");
conn.connect("_" + channel);
}
private function activateSlave(): void {
stage.nativeWindow.orderToFront();
// or
stage.nativeWindow.activate();
// or
stage.nativeWindow.alwaysInFront = true;
stage.nativeWindow.alwaysInFront = false;
}
如果我将两个应用程序都置于窗口模式(stage.displayState = StageDisplayState.NORMAL
),那么切换alwaysInFront
实际上是有效的。致电activate()
或orderToFront()
仍然无效。如果我尝试切换alwaysInFront
然后将应用程序设置为全屏,则应用程序会在我的窗口应用程序后面全屏显示。也许在将应用程序设置为全屏之前我应该等待一个事件?
我发现一个帖子提到orderToFront()
仅适用于相同应用程序中的窗口,这解释了为什么它似乎没有做任何事情。
有没有人有任何见解可以解决这个问题?也许有一种方法可以将B
嵌入到应用程序A
中,因此它们实际上是同一个应用程序?我不确定如何使用AIR应用程序执行此操作,只需要因为需要外部资源而加载SWF。
答案 0 :(得分:2)
由于没有其他人提供解决方案,我只是快速提到我正在使用的黑客。基本上我有2个LocalConnection
个频道,一个来自A
到B
,另一个来自B
到A
。
然后,可见程序(例如A
)将淡化为白色,将visible
设置为false
,并向B
发送消息以放弃控制权。 B
已使用stage.nativeWindow.visible = false
进行初始化,当它收到来自A
的消息时,它会以全白屏显示,并在GUI中淡入淡出。在A
将visible
设置为false
以显示B
时,会有轻微偏移,否则在两个窗口最小化的短暂时刻会出现弹出。< / p>
无论如何,你去了,它很丑,但实际上效果还不错。