Flex中的showSettings回调函数是什么?

3

我对Flex还比较陌生,如果这是一个显而易见的问题,请原谅。

是否有一种方法可以使用回调打开Security.showSettings(flash.system.Security)?或者至少检测它当前是否已经打开?

我的Flex应用程序用于流式音频,并且通常由JavaScript控制,因此我将其隐藏以进行正常使用(通过绝对定位将其放在页面外面)。

当我需要麦克风访问权限时,我需要使Flash设置对话框可见,这很好用,我将其移动到视图中并打开对话框。

当用户关闭它时,我需要将其移回屏幕外,以便在更改设置后不会看到空的Flex应用程序。

谢谢:)

2个回答

2
如果你像这样做,它在某些情况下会起作用:
var mic:Microphone = Microphone.getMicrophone();
mic.addEventListener(StatusEvent.STATUS, onMicStatus);

如果您只是尝试使用麦克风并依赖Flash弹出对话框来请求用户权限,Flash将打开一个带有两个按钮"允许(Allow)"和"拒绝(Deny)"的对话框。当用户点击其中一个按钮时,StatusEvent将触发,对话框将关闭,您可以将Flex应用程序移出屏幕。如果您手动打开设置面板(通过Security.showSettings),您将得到带有"允许(Allow)"和"拒绝(Deny)"单选按钮的面板,并且事件将在用户单击单选按钮时触发,而不是在他们关闭面板时触发,这可能对您没什么帮助。

当设置界面打开时,Flex应用程序是否失去焦点?也许我可以在舞台上放置一些东西,并绑定到焦点事件上? - Jiaaro
另一个想法:当安全对话框打开时是否会触发事件?这样,如果用户已经授予权限并“记住”,我就可以跳过显示 Flex 应用程序。 - Jiaaro
1
一旦你有一个 Microphone 对象(使用 getMicrophone),你可以检查它的 muted 属性,如果你有权限它将为 false。在这种情况下,你不需要显示安全对话框。我测试了应用程序在安全对话框打开时是否失去焦点 - 看起来是这样,所以那可能适合你,尽管 FOCUS_OUT 事件也会在浏览器窗口失去焦点时触发,这可能是一个问题。 - Wesley Petrowski
我发布了一个可能的答案...但它仍然有点棘手,你觉得呢? - Jiaaro

1

更新: flex 4 解决方案

当我转移到 flex 4 并开始使用 Adobe 的开源 mxmlc 编译器编译我的 mxml 时,下面的解决方案不再起作用,因为在设置中时警报不再失去焦点。

据我所知,我必须采用一个不太优雅的解决方案,其中用户必须每次在设置完成后点击警报框上的“确定”。

以下是新代码:

private function setup_smart_hide():void {
    // Call this function whenever you make the flex app visible (or add it
    // to a show_flex() function if you have such a thing set up)
    alert = Alert.show('Click "OK" to continue.', 'Thanks!', Alert.OK, null, function(e:CloseEvent):void {

        // calls the external javascript to hide the flex app
        hide_self();

    });
}

原文: (flex 3) 已经解决了这个问题...

private function setup_smart_hide():void {
    alert = Alert.show('Thanks');

    alert.addEventListener(FocusEvent.FOCUS_IN, function(event:FocusEvent):void {
            // javascript to hide the flex app
        ExternalInterface.call("SB.flex.hide");
    });
    alert.addEventListener(FocusEvent.FOCUS_OUT, function(event:FocusEvent):void {
            // javascript to show the flex app
        ExternalInterface.call("SB.flex.show");
    });

    alert.setFocus();
}

在init()函数中首先运行的是...唯一的问题是(就像Wesley所说),当Flex应用程序本身失去焦点时,focusOut事件也会发生。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接