zoukankan      html  css  js  c++  java
  • UWP开发入门(25)——通过Radio控制Bluetooth, WiFi

    回顾写了许久的UWP开发入门,竟然没有讲过通过Windows.Devices.Radios.Radio来控制Bluetooth和WiFi等功能的开关。也许是因为相关的API设计的简单好用,以至于被我给忽略了。最近工作中有涉及这块的内容,不妨一起来回顾下,顺便看看一些新的发现。

    在Windows 10以前,想要控制Bluetooth,WiFi等功能,那麻烦大了。得操作ManagementBaseObject,ManagementEventWatcher 等一系列WMI提供的API,写出来的代码又臭又长。其间还夹着复杂的WMI query字符串,十分难用。

    升级到Windows 10后,我们通过Windows.Devices.Radios.Radio可以方便的获取控制Bluetooth和WiFi的对象。

    var radios = await Radio.GetRadiosAsync();
    Bluetooth = radios.FirstOrDefault(r => r.Kind == RadioKind.Bluetooth);
    WiFi = radios.FirstOrDefault(r => r.Kind == RadioKind.Bluetooth);

    在拿到上面的Bluetooth和WiFi的Radio实例后,就可以通过

    Public event TypedEventHandler<Radio, object> StateChanged;

    来监听Radio实例的状态改变,可以说通过寥寥几行代码,就可以替代以往大量繁琐的操作。

    而设置Bluetooth和WiFi设备On/Off的状态,也非常简单。

    public IAsyncOperation<RadioAccessStatus> SetStateAsync(RadioState value);

    RadioState枚举如同字面的意思:

        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这一行才行。

      <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



  • 相关阅读:
    实战开发-》融云tp3.2.3
    and,or
    查看版本
    MySQL优化-》执行计划和常见索引
    mysql优化-》查询缓存
    【初赛专题】——明天初赛
    echarts入门-2直角系组件网格,坐标轴,grid axis
    maven ideal jetty
    HashMap深度解析
    sql异常:nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
  • 原文地址:https://www.cnblogs.com/manupstairs/p/13022067.html
Copyright © 2011-2022 走看看