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