Панель настроек безопасности Flash - Прослушивание для закрытия события? - PullRequest
12 голосов
/ 04 августа 2011

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

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

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

Ответы [ 4 ]

13 голосов
/ 04 августа 2011

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

Отчет об ошибках Flash Player с временным решением

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

Редактировать :

Для тех, кто не может / не хочет получить доступ к трекеру ошибок Adobe, вот обходной путь, изначально опубликованный Филиппом Пьено:1015 *

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; 
12 голосов
/ 14 февраля 2012

панель безопасности вызова (например, 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
            }
6 голосов
/ 02 сентября 2014

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

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 , который показывает диалоговое окно настроек, а затем обрабатывает его закрытие и немедленно уведомляет об этом через обратные вызовы.

0 голосов
/ 02 августа 2014

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...