Изменение размера события Flash Microphone

Недавно я изучал и изучал Flash AC3, и у меня было намерение сделать небольшой диктофон для моего веб-сайта. Я использую Google и поисковые системы и получаю разные ответы здесь и там, но все же это не совсем работает должным образом.

У меня проблема в том, что флеш-плагин имеет размер 215x50 пикселей. Я знаю, что если это не 215x138 пикселей, панель безопасности флеш-плеера автоматически НЕ откроется.

Я разработал обходной путь, который заключается в том, что если и когда безопасность вызывается для открытия, я бы изменил размер DIV, в котором находится флэш-объект, с помощью функции javascript, называемой ResizeFlash, до размера 215x138, а затем обратно до 215x50 после того, как пользователь сделает выбор, разрешают ли они микрофон.

Теперь я несколько дней ломал голову, потому что у меня ДЕЙСТВИТЕЛЬНО работает следующий код, и он изменяет размер DIV, но не изменяет размер DIV обратно. Я думаю, что у меня вызов ResizeFlash не в том месте (???). Я недостаточно знаком, чтобы знать, где это может быть неправильно.

Я продолжаю переставлять код, чтобы посмотреть, сработает ли это, и я получаю время, когда он изменяет размер до 215x138, открываю панель безопасности, затем изменяю размер обратно до 215x50, но тогда запись не начинается, как будто я застрял где-то в цикле .

Я надеюсь, что кто-то может потратить некоторое время, просто взглянуть на этот код и показать мне, как правильно с этим справиться. Большое тебе спасибо!

Вот код:

public function Main():void
{
    recButton.stop();
    submitButton.enabled = false;  // These reset everything, maybe in wrong place?? 
    activity.stop(); 
    addListeners();

        mic = Microphone.getMicrophone();

        if (mic == null)
        {
            // no camera is installed
        }
        else if (mic.muted)
        {
            // user has disabled the access in security settings
            mic.addEventListener(StatusEvent.STATUS, onMicStatus, false, 0, true); // listen out for their new decision
            Security.showSettings('2'); // show security settings window to allow them to change security settings
        }
        else
        {
            // you have access
            mic.setUseEchoSuppression(true); //... also this might be in wrong place?
            // .. I would like this to always be on
        }
    }

    private function addListeners():void
    {
        recButton.addEventListener(MouseEvent.MOUSE_UP, startRecording);
        submitButton.addEventListener(MouseEvent.MOUSE_UP, onSend);
        recorder.addEventListener(RecordingEvent.RECORDING, recording);
        recorder.addEventListener(Event.COMPLETE, recordComplete);
        activity.addEventListener(Event.ENTER_FRAME, updateMeter);

    }

    function onMicStatus(event:StatusEvent):void 
    {   
        if (event.code == "Microphone.Unmuted") 
        { 
            mic.removeEventListener(StatusEvent.STATUS, onMicStatus);
            ExternalInterface.call('ResizeFlash', '215', '50'); // When the user presses allow, resize the div back to 215x50
        }
    }

    private function startRecording(e:MouseEvent):void
    {
        recorder.record();
        e.target.gotoAndStop(2);

        recButton.removeEventListener(MouseEvent.MOUSE_UP, startRecording);
        recButton.addEventListener(MouseEvent.MOUSE_UP, stopRecording);

    }

    private function stopRecording(e:MouseEvent):void
    {
        recorder.stop();

        e.target.gotoAndStop(1);

        recButton.removeEventListener(MouseEvent.MOUSE_UP, stopRecording);
        recButton.addEventListener(MouseEvent.MOUSE_UP, startRecording);
    }

Я знаю, что у меня что-то там не в том порядке..! Я ценю любые комментарии.


person abelusmc    schedule 16.08.2012    source источник


Ответы (1)


Изменение размера приложения до 215x50 в обработчике событий состояния микрофона может быть слишком преждевременным, как вы предложили.

Просто догадка, но это событие состояния отправляется немедленно, когда пользователь нажимает переключатель «Разрешить» на панели безопасности Flash. Панель все еще открыта. На самом деле, если вы оставите его открытым и нажмете между разрешить/запретить, он будет отправляться каждый раз...

Когда панель безопасности поднята, есть некоторые вещи, которые вы не можете сделать. Интересно, не попадает ли в это ведро использование ExternalInterface (для изменения размера приложения).

Я бы предложил следующее:

  1. Проверьте свою функцию изменения размера без использования панели безопасности. Убедитесь, что этот код успешно изменяет размер приложения в обоих направлениях.
  2. Затем посмотрите на этот вопрос о том, как определить, когда пользователь фактически закрывает панель безопасности. Там есть два подхода, один очень хакерский (взлом BitmapData.draw()), но я знаю, что он работает. Я предлагаю попробовать второй и прокомментировать / проголосовать там, если он сработает (я тоже буду). Это более элегантный способ определить, когда пользователь закрывает диалоговое окно, но у меня не было возможности его попробовать.
  3. Когда вы обнаружите, что диалоговое окно закрыто, измените размер приложения.
person Sunil D.    schedule 17.08.2012
comment
спасибо за Ваш ответ. Это забавно, потому что я только недавно начал играть с Flash и AS3, и я долгое время программировал на C++, JS и HTML, и я заметил, что во Flash все еще есть много ошибок.. :) - person abelusmc; 18.08.2012
comment
Проблемы, связанные с диалоговыми окнами безопасности, могут раздражать разработчиков. Все ограничения предназначены для защиты пользователя (т. е. чтобы пользователя нельзя было обманом разрешить доступ к камере/микрофону и т. д.). Тем не менее, API, с которыми нам приходится работать, иногда не оправдывают ожиданий :) Надеюсь, ваш опыт работы с Flash улучшится. Одна из вещей, которые мне нравятся во Flash, — это согласованность: когда он работает, он будет работать на всех платформах/браузерах в 99% случаев, освобождая вас от всех этих особенностей браузера. - person Sunil D.; 18.08.2012
comment
примерно через неделю бессонных ночей, пытаясь выяснить, что я могу сделать, я придумал что-то вроде трюка ... Я прочитал несколько ответов, в которых говорилось, что нужно искать событие stage.FOCUS. Я также пробовал взломать BITMAP, но, кажется, я предполагаю, что с последним Flash Player BITMAP работает даже с включенной панелью (я думаю, потому что он дал бы «ОК», как только я попробовал бы это.) - person abelusmc; 19.08.2012
comment
В принципе, я пробовал все, и я сделал следующее. Когда я открываю панель безопасности, я также запускаю прослушиватель TIMER, который будет сканировать каждые 100 мс. Я бы поискал Microphone.Unmuted == TRUE. Затем я бы также отправил событие Focus на сцену. Когда обработчик onFocus обнаруживает событие, я бы сказал, что панель безопасности закрыта. Одна из моих первых попыток взлома, но, похоже, она работает. - person abelusmc; 19.08.2012