回顧寫了許久的UWP開發入門,居然沒有講過經過Windows.Devices.Radios.Radio來控制Bluetooth和WiFi等功能的開關。也許是由於相關的API設計的簡單好用,以致於被我給忽略了。最近工做中有涉及這塊的內容,不妨一塊兒來回顧下,順便看看一些新的發現。ios
在Windows 10之前,想要控制Bluetooth,WiFi等功能,那麻煩大了。得操做ManagementBaseObject,ManagementEventWatcher 等一系列WMI提供的API,寫出來的代碼又臭又長。其間還夾着複雜的WMI query字符串,十分難用。git
升級到Windows 10後,咱們經過Windows.Devices.Radios.Radio能夠方便的獲取控制Bluetooth和WiFi的對象。github
var radios = await Radio.GetRadiosAsync(); Bluetooth = radios.FirstOrDefault(r => r.Kind == RadioKind.Bluetooth); WiFi = radios.FirstOrDefault(r => r.Kind == RadioKind.Bluetooth);
在拿到上面的Bluetooth和WiFi的Radio實例後,就能夠經過spa
Public event TypedEventHandler<Radio, object> StateChanged;
來監聽Radio實例的狀態改變,能夠說經過寥寥幾行代碼,就能夠替代以往大量繁瑣的操做。設計
而設置Bluetooth和WiFi設備On/Off的狀態,也很是簡單。3d
public IAsyncOperation<RadioAccessStatus> SetStateAsync(RadioState value);
RadioState枚舉如同字面的意思:code
public enum RadioState { // // Summary: // The radio state is unknown, or the radio is in a bad or uncontrollable state. Unknown = 0, // // Summary: // The radio is powered on. On = 1, // // Summary: // The radio is powered off. Off = 2, // // Summary: // The radio is powered off and disabled by the device firmware or a hardware switch // on the device. Disabled = 3 }
這裏須要提一下的是,在第一次更改狀態前,UWP APP須要向用戶申請權限。對象
慢着慢着,貌似忘記給UWP APP向Windows要權限了,咱們要編輯Package.aaxmanifest文件,在Capabilities節點加上DeviceCapability這一行才行。blog
<Capabilities> <Capability Name="internetClient" /> <DeviceCapability Name="radios"></DeviceCapability> </Capabilities>
這回運行起來,才真的能夠操做Bluetooth和WiFi了。開發
是否是以爲幾行代碼就能寫出一個控制Bluetooth和WiFi的APP了?事實也確實如此。
若是人生只如初見那般美好,UWP的處境就不會如此難堪了。對於某軟提供了完善UWP API的功能,開發起來那是一個爽快。但要是沒有或是沒來得及提供,UWP就顯得頗爲尷尬了。
咱們不妨看下RadioKind的枚舉,很顯然若是想操做FM radio就得另尋他法。而MobileBoardband即Cellular也是從1703版本纔開始獲得支持。
那是否是意味這MobileBroadband就能夠像Bluetooth和WiFi同樣經過
public static IAsyncOperation<IReadOnlyList<Radio>> GetRadiosAsync();
來獲取實例對象了,還真不是,欲知如何操做,且聽下回《UWP開發入門(26)——經過Radio控制Cellular》。
實際是我Sample code還沒整理好。因此分紅了兩篇來寫。
有感日前MS Store裏的網易雲音樂UWP也被替換成Win32版本,可嘆國產的UWP APP愈來愈少。某軟畫了個好餅,惋惜不能讓人在Windows生態上經過UWP掙到錢。好技術生不逢時出不了頭,真是惋惜。
同時也能感受到某軟的妥協和進步,現現在的UWP,結合desktop extension以及desktop bridge技術。只要公司的APP能經過某軟的審覈,功能方面已經無限接近傳統desktop APP了。惋惜一個Windows平臺作Win32和UWP兩個產品,燒的錢可不是小數目。總不能用愛發電吧。
但願Win7早日被淘汰,WinUI 3.0能進一步融合UWP和Win32。距離上一次某軟說要重振desktop開發已通過去蠻久了。
本篇提到的相關Sample code在GitHub:
https://github.com/manupstairs/UWPSamples/tree/master/UWPSamples/RadioDevice