В настоящее время я создаю веб-сайт, который требует взаимодействия с микрофоном. Я уже создал компонент Flash, который обрабатывает звук и его внешние интерфейсы.
Назначение внешних интерфейсов, как вы можете догадаться, состоит в том, чтобы полностью обрабатывать пользовательский интерфейс с помощью HTML / CSS / Javascript. Он отлично работает, за исключением нескольких вещей. Во-первых, Flash-фильм перестает быть отзывчивым, если его не видно. Я собрал вместе решение этой проблемы, просто сделав его размером 1 на 1 пиксель в неиспользуемой части окна просмотра.
Другая проблема заключается в том, что Flash иногда представляет диалоговое окно безопасности, запрашивающее у пользователя доступ. Теперь я выяснил, как принудительно вызвать диалоговое окно безопасности :
Security.showSettings(SecurityPanel.PRIVACY);
Fine (дополнительный вопрос: как я могу вызвать обратный вызов при срабатывании настройки?).
Но у этого есть два недостатка:
1. It doesn't theoretically catch the case where the user revokes privileges during the running of the application.
2. It doesn't detect if the user has already granted permission.
Я полагаю, что можно обойти обе эти проблемы: иметь один глобальный флаг (или, что еще полезнее, привязываемый атрибут или событие), чтобы получить текущее состояние безопасности и время его изменения.
Любые идеи будут с благодарностью.
Обновление
Я немного побродил и написал это:
import flash.system.Security;
import flash.system.SecurityPanel;
import flash.external.ExternalInterface;
import flash.media.Microphone;
import flash.events.StatusEvent;
var m:Microphone = Microphone.getMicrophone();
m.addEventListener(StatusEvent.STATUS, function(e:StatusEvent){
if(e.code == "Microphone.Unmuted") {
ExternalInterface.call('window.SpeechWrapper.messenger.microphonePermissionGranted');
} else {
ExternalInterface.call('window.SpeechWrapper.messenger.microphonePermissionDenied');
}
});
if(m.muted) {
Security.showSettings(SecurityPanel.PRIVACY);
} else {
ExternalInterface.call('window.SpeechWrapper.messenger.microphonePermissionGranted');
}
Однако проблема в том, что, поскольку, похоже, нет способа выяснить, просил ли пользователь о выборе, который нужно запомнить в домене безопасности, я не могу представить отдельный облегченный swf, предназначенный для попросить разрешения.