近日在做基于Windows的藍(lán)牙程序開(kāi)發(fā)時(shí),需要使用程序來(lái)開(kāi)啟藍(lán)牙的“啟用發(fā)現(xiàn)”,即使用API函數(shù)BluetoothEnableDiscovery。結(jié)果發(fā)現(xiàn)了如下問(wèn)題:
1. 無(wú)論程序中通過(guò)BluetoothEnableDiscovery對(duì)“啟用發(fā)現(xiàn)”作出如何的控制,程序退出后仍然回到之前“啟用發(fā)現(xiàn)”的狀態(tài)。
2. 正常情況下,程序可以對(duì)“啟用發(fā)現(xiàn)”作出控制。但是,當(dāng)用戶使用控制面板中的藍(lán)牙控制對(duì)“啟用發(fā)現(xiàn)”做出操作后,程序中再次使用BluetoothEnableDiscovery進(jìn)行控制時(shí),該函數(shù)返回是成功,但是你會(huì)發(fā)現(xiàn)其實(shí)并沒(méi)有起作用。而手工使用控制面板中的藍(lán)牙控制仍然可以正常的進(jìn)行控制。
3. 當(dāng)你的程序運(yùn)行中,藍(lán)牙裝置進(jìn)行了拔插的操作后,程序就無(wú)法通過(guò)BluetoothEnableDiscovery進(jìn)行操作了。
4. 控制函數(shù)BluetoothEnableIncomingConnections不存在如上的問(wèn)題。
在網(wǎng)上查了一下,發(fā)現(xiàn)國(guó)外也有人提出此類(lèi)問(wèn)題,但是沒(méi)有人做出回答。我估計(jì),是不是因?yàn)?#8220;啟用發(fā)現(xiàn)”與進(jìn)程的控制域有關(guān),系統(tǒng)的控制域大于進(jìn)程的控制域,因此當(dāng)系統(tǒng)作出了操作后,進(jìn)程就沒(méi)有權(quán)限進(jìn)行控制了?,F(xiàn)在也只能這樣解釋了,不知道哪位高人看到我這篇文章后可以給出合理的解釋和解決方案。