1

私は最近 Flash AC3 を勉強して学んでおり、自分のウェブサイト用に小さなボイスレコーダーを作るつもりでした。私はグーグルと検索エンジンを使用しており、あちこちで異なる回答を得ていますが、それでも正確には正しく機能していません.

私が抱えている問題は、フラッシュ プラグインが 215x50 ピクセルであることです。215x138 ピクセルでない限り、Flash Player のセキュリティ パネルは自動的に開きません。

セキュリティが呼び出されて開く場合、ResizeFlash という JavaScript 関数を使用して Flash オブジェクトが含まれる DIV のサイズを 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);
    }

私は間違った順序でそこに何かがあることを知っています..! コメントをお待ちしております。

4

1 に答える 1

0

あなたが示唆したように、マイクのステータスイベントハンドラーでアプリのサイズを215x50に戻すのは早すぎるかもしれません。

推測ですが、このステータス イベントは、ユーザーが Flash セキュリティ パネルの [許可] ラジオ ボタンをクリックするとすぐにディスパッチされます。パネルはまだ開いています。実際、開いたままにして許可/拒否をクリックすると、毎回ディスパッチされます...

セキュリティパネルが立ち上がると、できないことがいくつかあります。ExternalInterface(アプリのサイズを変更するために)を使用することは、このバケツに該当するのだろうか。

次のことをお勧めします。

  1. セキュリティ パネルを混在させずに、サイズ変更機能をテストします。このコードが両方向でアプリのサイズを正常に変更することを確認してください。
  2. 次に、ユーザーが実際にセキュリティ パネルを閉じたことを検出する方法について、この質問を見てください。そこには 2 つのアプローチがあり、1 つは非常にハック (BitmapData.draw() ハック) ですが、機能することはわかっています。2番目のものを試して、うまくいく場合はコメント/賛成票を投じることをお勧めします(私もそうします)。これは、ユーザーがダイアログを閉じたことを検出するより洗練された方法ですが、試してみる機会がありませんでした。
  3. ダイアログが閉じていることを検出したら、アプリのサイズを変更します。
于 2012-08-17T16:26:09.860 に答える