2020年的UWP——通过Radio类控制Cellular(1)
最近在做UWP的项目,在2020年相信这已经是相对小众的技术了,但是在学习的过程中,发现某软这么几年仍然添加了不少的API,开放了相当多的权限。所以打算总结一下最近的一些经验和收获,介绍一下2020年的UWP。
之前在《UWP开发入门(25)——通过Radio控制Bluetooth, WiFi》篇中我们回顾了在UWP中如何操作Bluetooth和WiFi。在相当长的一段时间里,我都认为Radio类就止步于此了。然鹅最近的实践表明,Cellular也可以通过Radio类来控制了。

在介绍使用Windows.Devices.Radios.Radio控制Bluetooth和WiFi对象时,我们提到了GetRadiosAsync方法。
var radios = await Radio.GetRadiosAsync();
Bluetooth = radios.FirstOrDefault(r => r.Kind == RadioKind.Bluetooth);
WiFi = radios.FirstOrDefault(r => r.Kind == RadioKind.Bluetooth);
我们会根据RadioKind枚举来判断拿到Radio对象的具体类型。

只有认真读文档的同学,才会发现MobileBroadband在1703之后获得了支持。1703大概是2017年4月发布的。
这是不是意味着MobileBroadband在1703之后,就可以像Bluetooth和WiFi一样通过
public static IAsyncOperation<IReadOnlyList<Radio>> GetRadiosAsync();
来获取实例对象了,还真不是。通过RadiosAsync根本拿不到MobileBroadband类型的Radio对象,也就是本文提到的Cellular。
我们只能通过更原始的方式,通过
public static IAsyncOperation<Radio> FromIdAsync(string deviceId);
方法来查找Cellular类型的Radio对象。
public async Task InitializeAsync()
{
//var radios = await Radio.GetRadiosAsync();
//RadioModel = radios.FirstOrDefault(r => r.Kind == RadioKind);
var selectorString = Radio.GetDeviceSelector();
var deviceInfos = await DeviceInformation.FindAllAsync(selectorString);
foreach (var deviceInfo in deviceInfos)
{
var radio = await Radio.FromIdAsync(deviceInfo.Id);
if (radio.Kind == RadioKind)
{
RadioModel = radio;
}
}
this.OnPropertyChanged("IsOn");
}
首先我们通过Radio.GetDeviceSelector方法拿到了用于查找Radio设备的字符串,然后通过DeviceInfomation.FindAllAsync方法取得当前设备上所有符合selectorString的Radio对象。再通过RadioKind.MobileBroadband筛选取得Cellular类型的Radio对象。

至此,我们通过Radio控制Cellular的目的在理论上算是达成了。实际呢,千万不要忘记打开Package.appxmanifest文件添加Capabilities。首先对所有的Radio操作而言
<DeviceCapability Name="radios"></DeviceCapability>
权限是必须的。而想要控制Cellular,那还需要申请受限的
<rescap:Capability Name="cellularDevcieControl"></rescap:Capability>
Namespace rescap的声明如下:
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap mp rescap">
需要留意的是,<rescap:Capability>必须写在<DeviceCapability>的前面才能生效。
<Capabilities>
<rescap:Capability Name="cellularDeviceControl"/>
<DeviceCapability Name="radios"/>
</Capabilities>

本篇算是一个序章,后续打算分享下UWP在2020年可以做到的一些有意思的feature,感觉已经无限接近传统的desktop application了。
有趣的是,曾在知乎上看到对UWP一些讨论,似乎对desktop extension的方式很不认同,认为是在背后偷偷摸摸干坏事。我想说的是,现在还在做UWP的,很多都是用爱发电了。哪有那份心去干坏事啊……
本篇Sample code:
https://github.com/manupstairs/UWPSamples/tree/master/UWPSamples/RadioDevice
2020年的UWP——通过Radio类控制Cellular(1)的更多相关文章
- jQuery根据radio来控制texteara
最近遇到一个问题:需要通过点击radio来控制texteara的属性变化. 这里主要有两个知识点:1,给texteara设置属性:2,给texteara设置背景颜色. 在这里,假设texteara的i ...
- Day 5-8 自定义元类控制类的实例化行为
__call__方法: 对象后面加括号,触发执行. 注:构造方法的执行是由创建对象触发的,即:对象 = 类名() :而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类( ...
- 2020年的UWP(3)——UWP和desktop extension的简单交互
上一篇<2020年的UWP(2)--In Process App Service>中我们了解了UWP和Desktop Extension可以通过AppService进行数据交互.本篇我们就 ...
- 2020年的UWP(4)——UWP和等待Request的Desktop Extension
上一篇我们讨论了UWP和Desktop Extension交互中,Desktop Extension执行后立即退出的场景.下图是提到的四种场景分类: 执行后立即退出 等待request,处理完后退出 ...
- 【笔记】css hover 伪类控制其他元素
最近在模仿一个网站的项目 当中有一个效果需要利用到hover效果因为不太想写jq脚本所以百度了一下css hover的运用发现原来hover也可以控制其他元素的变化的 但是这有一个要求 就是添加hov ...
- python 通过元类控制类的创建
一.python中如何创建类? 1. 直接定义类 class A: a = 'a' 2. 通过type对象创建 在python中一切都是对象 在上面这张图中,A是我们平常在python中写的类,它可以 ...
- java 利用同步工具类控制线程
前言 参考来源:<java并发编程实战> 同步工具类:根据工具类的自身状态来协调线程的控制流.通过同步工具类,来协调线程之间的行为. 可见性:在多线程环境下,当某个属性被其他线程修改后,其 ...
- 2020年的UWP(2)——In Process App Service
最早的时候App Service被定义为一种后台服务,类似于极简版的Windows Service.App Service作为Background Task在宿主UWP APP中运行,向其他UWP A ...
- 2020年的UWP(5)——UWP和Desktop Extension的双向交互
上一篇我们提到了怎么在Desktop Extension中等待并处理UWP端发出的request.在本篇中将描述UWP和Desktop Extension双向交互的场景,即存在从两端各自发出reque ...
随机推荐
- python种类
JPython IronPython CPython JavaScriptPython 等等. 这些python的区别是他们隶属于不同的厂商,而我们所说的python通常是指CPython, 因为不同 ...
- 【Python 实例】面向对象 | 按相反的顺序输出列表的值
[Python 实例]面向对象 | 按相反的顺序输出列表的值 题目: 解答: 运行结果: 题目: 按相反的顺序输出列表的值 解答: """ 按相反的顺序输出列表的值 &q ...
- TF签名 外部测试 内部测试 TestFlight
1.将release包传到iTunes connect 2. 绿线是内部测试 A.需要添加测试员 B.最多25个测试员 C.提交到iTunes connect不需要等待审核,即可测试 红线是外部测试( ...
- CRF
- Python3 连接 Oracle 数据库
Python3 连接 Oracle 数据库 需要导出一些稍微复杂的数据,用Python处理很方便 环境 Win10 Python 3.7.0 Oracle 11g 安装依赖 安装 cx_Oracle ...
- 微信商户H5支付申请不通过被驳回,拒绝原因提示:网站存在不实内容或不安全信息
一.H5支付简介及使用场景说明 H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付.主要用于触屏版的手机浏览器请求微信支付 ...
- tableauRFM分析
1.数据源 2.创建相关字段 2.1 购买点会员生命期 2.2 会员最后购买时间 2.3 最后购买点生命期 3.近一个月老客户的生命期情况 排除了当天创建当天购买的情况,可以看到超市的大部分用户是两年 ...
- C++中inet_pton、inet_ntop函数
- 头文件windows下:#include <WS2tcpip.h>linux下:#include <sys/socket.h>#include <netinet/in ...
- CSDN新版Markdown编辑器(Alpha 2.0版)
Markdown编辑器 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建 ...
- Broken 2020: 1 靶机
这个靶机的作者脑洞太大了 扫描下端口,就普通的ssh http服务 扫描下目录,发现了一个2个cms目录 进来cms发现是个安装界面,但是后面安装失败,无意返回cms发现出现了一个flag 进入/cm ...