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 = ,
//
// Summary:
// The radio is powered on.
On = ,
//
// Summary:
// The radio is powered off.
Off = ,
//
// Summary:
// The radio is powered off and disabled by the device firmware or a hardware switch
// on the device.
Disabled =
}
这里需要提一下的是,在第一次更改状态前,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
UWP开发入门(25)——通过Radio控制Bluetooth, WiFi的更多相关文章
- UWP开发入门(十六)——常见的内存泄漏的原因
本篇借鉴了同事翔哥的劳动成果,在巨人的肩膀上把稿子又念了一遍. 内存泄漏的概念我这里就不说了,之前<UWP开发入门(十三)——用Diagnostic Tool检查内存泄漏>中提到过,即使有 ...
- UWP开发入门系列笔记之(一):UWP初览
标签: 随着微软Build2015带来的好消息,Win10正式版发布的日子已经离我们越来越近了,我们也终于欣喜地看到:一个统一的Windows平台对于开发人员来说充满了吸引力,这局棋下的好大的说--于 ...
- UWP开发入门(十)——通过继承来扩展ListView
本篇之所以起这样一个名字,是因为重点并非如何自定义控件,不涉及创建CustomControl和UserControl使用的Template和XAML概念.而是通过继承的方法来扩展一个现有的类,在继承的 ...
- UWP开发入门(四)——自定义CommandBar
各位好,再次回到UWP开发入门系列,刚回归可能有些不适应,所以今天我们讲个简单的,自定义CommandBar,说通俗点就是自定义类似AppBarButton的东西,然后扔到CommandBar中使用. ...
- UWP开发入门(七)——下拉刷新
本篇意在给这几天Win10 Mobile负面新闻不断的某软洗地,想要证明实现一个简单的下拉刷新并不困难.UWP开发更大的困难在于懒惰,缺乏学习的意愿.而不是“某软连下拉刷新控件都没有”这样的想法. 之 ...
- UWP开发入门(一)——SplitView
接下来会写一个UWP(Universal Windows Platform)开发入门的系列,自己学习到哪里,有什么心得总结,就会写到哪里.本篇对适用于顶层导航的SplitView控件展开讨论. 首先S ...
- UWP开发入门(十一)——Attached Property的简单应用
UWP中的Attached Property即附加属性,在实际开发中是很常见的,比如Grid.Row: <Grid Background="{ThemeResource Applica ...
- UWP开发入门(二十三)——WebView
本篇讨论在UWP开发中使用WebView控件时常见的问题,以及一些小技巧. WebView是实际开发中常用的控件,很多大家抱怨的套网页的应用都是通过WebView来实现的.这里要澄清一个问题,套网页的 ...
- UWP开发入门(二十一)——保持Ui线程处于响应状态
GUI的程序有时候会因为等待一个耗时操作完成,导致界面卡死.本篇我们就UWP开发中可能遇到的情况,来讨论如何优化处理. 假设当前存在点击按钮跳转页面的操作,通过按钮打开的新页面,在初始化过程中存在一些 ...
随机推荐
- jQuery如何使用键盘事件,按住空格键完成进度条效果,并终止键盘事件
jQuery使用键盘事件 keyup:键盘抬起时 keydown:键盘按下时 keypress:键盘按住时 运行下列代码,可以看效果 $(document).keyup(function () { c ...
- php时间输出结果减去一分钟
如: <?=date("m-d H:i",strtotime($rs["kgtime"]));?> 假设结果是09-03-23:30,如何让它变成0 ...
- Nacos下动态路由配置
前言 Nacos最近项目一直在使用,其简单灵活,支持更细粒度的命令空间,分组等为麻烦复杂的环境切换提供了方便:同时也很好支持动态路由的配置,只需要简单的几步即可.在国产的注册中心.配置中心中比较突出, ...
- 一看就懂的Ubuntu系统下samba服务器安装配置教程
文章目录 前言 环境搭建 安装 配置 Examples 1 创建共享(任何人都可以访问) 2 单用户权限(需要密码访问) 添加samba用户 配置参数 3 支持游客访问(单用户拥有管理员权限) 前言 ...
- JDBC09 CLOB文本大对象
CLOB(Character Large Object) -用于储存大量的文本数据 BLOB(Binary Large Object) -用于存储大量的二进制数据 -大字段有些特殊,不同数据处理的方式 ...
- js代码中引入其他js文件
/***引入 js 文件 @example: import('js/aui.picker.js') @example: import(['js/aui.picker.js', 'css/aui.pic ...
- JavaWeb学习之JSP(三) EL表达式
EL表达式 什么是EL表达式 EL,Expression Language,表达式语言,是一种在JSP页面中获取数据的简单方式,通过${变量名}的方式可以获取到值,需要注意的是EL只能从 page ...
- 24个经典的MySQL索引问题,你都遇到过哪些?
索引 1.什么是索引? 2.索引有哪些优缺点? 3.索引使用场景(重点) 4.索引有哪几种类型? 5.索引的数据结构(b树,hash) 6.索引的基本原理 7.索引算法有哪些? 8.索引设计的原则? ...
- 前端ie7的兼容问题及解决方案(未完待续)
最近在维护一些老的项目,需要兼容ie7 ,css3就不能用了,这里总结一下碰到的问题及解决方案. 1.盒模型 ie7.8 的盒模型都是 box-sizing为content-box的盒模型,这里在做 ...
- 中国空气质量在线监测分析平台之JS加密、JS混淆处理
中国空气质量在线监测分析平台数据爬取分析 页面分析:确定url.请求方式.请求参数.响应数据 1.访问网站首页:https://www.aqistudy.cn/html/city_detail.htm ...