Подтвердить что ты не робот

Панель настроек безопасности - прослушивание закрытого события?

При использовании Flash с микрофоном или камерой пользователю предлагается разрешить доступ к этим устройствам. Это делается с помощью встроенной панели настроек безопасности.

Есть ли способ уведомлять обработчик события, когда пользователь нажимает кнопку закрытия панели настроек безопасности? Это не представляется возможным...

Для микрофона можно получить событие состояния, когда пользователь изменяет настройки на панели безопасности, но это событие запускается, пока пользователь по-прежнему открывает панель.

4b9b3361

Ответ 1

Я наткнулся на это, пытаясь найти решение.

Отчет об ошибке для проигрывателя Flash Player С ПРОГРАММОЙ

Я не тестировал обходной путь, но он все равно должен работать? Удачи.

Edit

Для тех, кто не может/не получит доступ к отладчику ошибок Adobe, вот обходное решение, первоначально опубликованное Philippe Piernot:

var closed:Boolean = true;
var dummy:BitmapData;
dummy = new BitmapData(1, 1);

try
{
    // Try to capture the stage: triggers a Security error when the settings dialog box is open
    dummy.draw(stage);
}
catch (error:Error)
{
    closed = false;
}

dummy.dispose();
dummy = null; 

Ответ 2

панель безопасности вызова (например, ns.addStream(mic))

            // WHEN PRIVACY PANEL IS ON MOUSE EVENTS ARE DISABLED
            stage.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
            function onMouseOver(e:Event):void { 
                trace("privacy panel closed");
                //REMOVE THE LISTENER ON FIRST TIME
                stage.removeEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
                //doStuff
            }

Ответ 3

Я решил эту проблему следующим образом:

private function showPrivacyDialog():void {
    var spr:Sprite = new Sprite();
    stage.focus = spr;
    spr.addEventListener( FocusEvent.FOCUS_OUT, handleFocusEvent );
    spr.addEventListener( FocusEvent.FOCUS_IN, handleFocusEvent );
    Security.showSettings( SecurityPanel.PRIVACY );
}

private function handleFocusEvent( event:Event ):void {
    event.target.removeEventListener( event.type, handleFocusEvent );
    const closed:Boolean = (event.type == FocusEvent.FOCUS_IN);
    trace( "Security Panel just", closed ? "closed!" : "shown!" );
    if (closed) {
        stage.focus = null; // or it can be restored to the previous value
    }
}

Проверьте мой полный класс утилиты SecurityPanelUtil, который показывает диалог настроек, а затем обрабатывает его и уведомляет через обратные вызовы немедленно.

Ответ 4

Панель тайно отображается с использованием встроенного механизма отображения Flash. Для этого они тайно добавляют панель в список отображения сцены.

Вы можете обнаружить это, установив, что stage.getChildAt(stage.numChildren-1) равно нулю. Это иначе невозможно сценарий, который показывает существование панели.