如果有一个可用的麦克风,那么可以为StatusEvent添加一个事件监听器。但是,这只会告诉您麦克风是被允许还是被禁止。
我真正想做的是检测静态Microphone.names属性是否发生变化。我原以为这个属性是可绑定的。
如果我在插入麦克风后立即右键单击并选择“设置”,我可以看到闪存已更新其可用麦克风列表。但是,在代码中似乎没有办法让我接收相同的更新。
文档说“调用Microphone.names需要对硬件进行全面检查,构建阵列可能需要几秒钟。”所以我认为每隔几秒轮询一次就不是一个可行的选择。
答案 0 :(得分:0)
我不确定你是否可以在Microphone的'names'数组上设置一个实际可行的更改观察器,因为只有每次更新数组的引用(新数组)时才会调用观察器。所以这是未经测试的,但需要尝试:
var watcher:ChangeWatcher = ChangeWatcher.watch(Microphone, ['names'], onNameChange);
只需要创建onNameChange处理程序以查看它是否实际被调用。如果这不起作用,那么你需要每隔x个时间进行某种名称的“轮询”。
答案 1 :(得分:0)
我运行了一个小测试脚本:
var ta:TextArea = new TextArea();
ta.width = ta.height = 500;
addChild(ta);
var t:Timer = new Timer(5000);
t.addEventListener(TimerEvent.TIMER, function(e:Event):void{
var t0:uint = getTimer();
var m:* = Microphone.getMicrophone();
ta.text += "mic found: "+(m?true:false)+" "+(getTimer()-t0);
t0 = getTimer();
var o:* = Microphone.names;
ta.text += "\t\ttime to get names: "+(getTimer()-t0)+"\n";
});
t.start();
结果总是少于10毫秒(getMicrophone是0-3ms,名字是2-9ms),这对我来说似乎相当快。我不知道,也许这是我的电脑,但它似乎并不太强烈。因为getMicrophone就是我所需要的,所以没有关于它的使用的官方警告,并且它的速度稍微快一些,我将每隔几秒左右轮询一次getMicrophone来处理这个问题。
如果此处有人关心运行此脚本并对您的结果提供一些反馈,这可能会帮助我和其他人做出更好的选择。
答案 2 :(得分:-1)
正如你所说,没有任何事件暴露在这个问题上。 该属性不可绑定,因为Microphone是Flash播放器功能,而不是Flex麦克风包装器(因为今天的绑定只是Flex)。
我建议你每隔几秒轮询一次Microphone.getMicrophone()并声明它不是null。这个电话远没有那么严格的考试#34;比Microphone.names。