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开发中可能遇到的情况,来讨论如何优化处理. 假设当前存在点击按钮跳转页面的操作,通过按钮打开的新页面,在初始化过程中存在一些 ...
随机推荐
- Prime Path素数筛与BFS动态规划
埃拉托斯特尼筛法(sieve of Eratosthenes ) 是古希腊数学家埃拉托斯特尼发明的计算素数的方法.对于求解不大于n的所有素数,我们先找出sqrt(n)内的所有素数p1到pk,其中k = ...
- Spring Boot 整合 Apache Dubbo
Apache Dubbo是一款高性能.轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现. 注意,是 Apache Dubb ...
- SpringMVC源码学习:容器初始化+MVC初始化+请求分发处理+参数解析+返回值解析+视图解析
目录 一.前言 二.初始化 1. 容器初始化 根容器查找的方法 容器创建的方法 加载配置文件信息 2. MVC的初始化 文件上传解析器 区域信息解析器 handler映射信息解析 3. Handler ...
- GitHub上Asp.Net Core的源代码
记录,备查. https://github.com/aspnet/AspNetCore/tree/master/src
- Linux编程实现递归查找文件
命令格式如下:SCRIPT_NAME SEARCH_ON_DIR SEARCH_FILENAME #!/bin/bash Find(){ files=`` for file i ...
- 【Kafka】实时看板案例
目录 项目需求 项目模型 实现步骤 项目需求 快速计算双十一当天的订单量和销售金额 项目模型 实现步骤 一.创建topic bin/kafka-topics.sh --create --topic i ...
- R语言:计算现金工资的币数
新入职的员工,有的没有相应银行卡,需要计算现金工资的币数.实发工资,一般取整数. 简化计算,纸币面值只有100.10.1.4278除以100等于42余78,78除以10等于7余8,8除以1等于8. 复 ...
- springBoot整合Spring-Data-JPA, Redis Redis-Desktop-Manager2020 windows
源码地址:https://gitee.com/ytfs-dtx/SpringBoot Redis-Desktop-Manager2020地址: https://ytsf.lanzous.com/b01 ...
- 设计模式之GOF23中介者模式
中介者模式Mediator 场景:公司中各个部门需要交互,通过中介总经理进行交互 核心: 如果一个系统中对象之间的联系成网状结构,对象之间多对多,将导致关系极其复杂,这些对象统称为“同事关系” 我们可 ...
- Spark SQL源码解析(四)Optimization和Physical Planning阶段解析
Spark SQL原理解析前言: Spark SQL源码剖析(一)SQL解析框架Catalyst流程概述 Spark SQL源码解析(二)Antlr4解析Sql并生成树 Spark SQL源码解析(三 ...