将Flash与麦克风或相机配合使用时,系统会提示用户允许访问这些设备。这是通过内置的安全设置面板完成的。
当用户点击安全设置面板的关闭按钮时,是否有办法让事件处理程序得到通知?这似乎不可能......
对于麦克风,当用户更改安全面板中的设置时,可能会收到状态事件,但在用户仍然打开面板时会触发此事件。
答案 0 :(得分:13)
在尝试搜索解决方案时,我偶然发现了这一点。
Flash Player bug report WITH WORKAROUND
我还没有测试过变通方法,但 仍然有效吗?祝你好运。
修改强>:
对于那些不能/不会访问Adobe bug跟踪器的人来说,这是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;
答案 1 :(得分:12)
调用安全面板(如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
}
答案 2 :(得分:6)
我已经通过下一个方式解决了这个问题:
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,然后将其处理完毕并立即通过回调通知。
答案 3 :(得分:0)
使用Flash自己的显示引擎秘密渲染面板。为此,他们秘密地将面板添加到舞台的显示列表中。
您可以通过检查stage.getChildAt(stage.numChildren-1)是否等于null来检测此情况。这是一个不可能的场景,揭示了小组的存在。