UWP开发入门(25)——经过Radio控制Bluetooth, WiFi

回顾写了许久的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

相关文章
相关标签/搜索