示例工程【免费下载链接】Windows-universal-samplesAPI samples for the Universal Windows Platform.项目地址https://gitcode.com/gh_mirrors/wi/Windows-universal-samples点击查看免费下载本指南以 Windows-universal-samples 仓库中的 UssdProtcol 示例 为主线深入讲解如何在 UWP 应用中通过Windows.Networking.NetworkOperators命名空间与 GSM 移动宽带调制解调器进行 USSD非结构化补充业务数据会话交互包括权限清单配置、请求/响应编码实现、结果码处理与构建部署全流程。读完本文你将掌握UssdSession、UssdMessage、UssdReply等核心 API 的完整调用链以及编写面向移动运营商账户管理类应用所需的全部工程要点。USSD 协议与示例背景USSDUnstructured Supplementary Service Data非结构化补充业务数据是一种基于 GSM 网络的会话型交互协议与短信SMS不同它建立的是实时双向信道通常用于移动宽带订阅的账户管理场景——例如查询余额、充值、开通或变更套餐等。USSD 消息由移动运营商定义内容与格式因运营商而异因此在真实网络中部署时必须针对目标运营商的 USSD 代码进行适配。本仓库中的UssdProtcol示例见 Samples/UssdProtcol演示了如何通过 UWP 的移动宽带 API 发送 USSD 请求并接收网络侧回复。从仓库顶层的示例分类目录看它属于网络与 Web 服务Networking and Web Services类别其唯一场景是「Request/response」请求/响应在 SampleConfiguration.cs 中注册为FEATURE_NAME USSD Protocol。该示例只提供 C# 语言实现项目结构如下文件作用RequestResponse.xaml请求/响应场景的界面消息输入框、发送按钮、状态栏RequestResponse.xaml.cs核心逻辑创建 USSD 会话、发送消息、解析回复SampleConfiguration.cs注册示例场景接入 SDK 模板框架Package.appxmanifest应用清单声明cellularDeviceControl特殊功能UssdProtocol.csproj项目文件通过链接引用 SharedContent 共享代码与资源前提条件特殊功能声明与硬件要求特殊功能special-use capabilityUSSD 会话会直接操控移动宽带调制解调器属于运营商特权 API因此示例在包清单中声明了一个受限的特殊功能Capabilities r:Capability NamecellularDeviceControl/ /Capabilities清单头部同时通过xmlns:r引入了 restricted capabilities 命名空间并用IgnorableNamespacesuap mp r标记这些命名空间可被忽略以保证旧版本工具链仍可解析清单。除该特殊功能外清单还将目标设备家族限定为桌面端Windows.Desktop最低版本 10.0.10240.0。必须注意的限制原文档已明确由于使用了特殊功能该示例无法通过 WACKWindows 应用认证工具包认证因此不能直接提交到 Microsoft Store 上架仅供移动宽带运营商内部或经授权场景使用USSD API 在手机Phone设备上存在但不具备实际功能即 API 可调用但不会产生真实的网络交互。系统与硬件要求项目要求硬件带有移动宽带调制解调器的 PC内置 GSM 蜂窝模块客户端Windows 10桌面版手机端不支持由于 API 面向真实蜂窝网络没有任何调制解调器硬件的普通 PC 上无法观察到完整的 USSD 交互结果——RequestResponse.xaml.cs 中对「未找到网络账户」的显式处理正是这一现实的代码反映。核心实现解析请求/响应完整调用链示例的请求/响应场景全部集中在 RequestResponse.xaml.cs 的SendButton_Click事件处理器中配合 RequestResponse.xaml 的界面MessageText输入框与SendButton按钮。其调用链可拆解为四个阶段。第一步输入校验与账户枚举发送前先校验消息不能为空随后通过MobileBroadbandAccount.AvailableNetworkAccountIds枚举系统当前可用的移动宽带网络账户IReadOnlyListstring networkAccIds Windows.Networking.NetworkOperators.MobileBroadbandAccount.AvailableNetworkAccountIds; if (networkAccIds.Count 0) { rootPage.NotifyUser(No network account ID found, NotifyType.ErrorMessage); return; } // 为简化演示默认使用第一个账户 string networkAccountId networkAccIds[0];源码注释明确说明真实产品中应通过MobileBroadbandAccount的其它 API 根据运营商、SIM 卡等条件选择特定账户示例仅为演示起见取第一个账户。第二步创建 USSD 会话并发送消息UssdSession session UssdSession.CreateFromNetworkAccountId(networkAccountId); UssdReply reply await session.SendMessageAndGetReplyAsync(new UssdMessage(MessageText.Text));UssdSession.CreateFromNetworkAccountId为指定网络账户 ID 创建会话UssdMessage承载要发送的 USSD 文本消息内容必须与运营商定义的 USSD 代码匹配源码注释特别强调了这一点SendMessageAndGetReplyAsync异步发送消息并等待网络回复这是整个交互的核心异步点。第三步按结果码分类处理回复UssdResultCode code reply.ResultCode; if (code UssdResultCode.ActionRequired || code UssdResultCode.NoActionRequired) { UssdMessage replyMessage reply.Message; string payloadAsText replyMessage.PayloadAsText; if (payloadAsText ! ) { rootPage.NotifyUser(Response: payloadAsText, NotifyType.StatusMessage); } else { rootPage.NotifyUser(Unsupported data coding scheme 0x replyMessage.DataCodingScheme.ToString(X), NotifyType.StatusMessage); } } else { rootPage.NotifyUser(Request failed: code.ToString(), NotifyType.StatusMessage); }UssdReply总包含一个ResultCode。当结果码为ActionRequired需用户进一步操作或NoActionRequired无需进一步操作时回复中才携带网络下发的UssdMessage其它结果码一律视为请求失败。这一分支逻辑是 USSD 会话交互中最关键的状态机判断。第四步处理消息编码与关闭会话网络回复的消息可能使用多种编码Data Coding Scheme数据编码方案若 Windows 支持该编码UssdMessage.PayloadAsText可直接取得文本内容非空字符串即表示解码成功源码注释指出「对空字符串的测试已足够」若编码不受支持PayloadAsText为空此时可读取DataCodingScheme以十六进制展示获知编码方案并可通过replyMessage.GetPayload访问原始二进制载荷做进一步处理。另外注意会话生命周期的处理if (code UssdResultCode.ActionRequired) { session.Close(); // 从本端关闭会话 }仅当结果码为ActionRequired网络正在等待用户下一次输入时示例才主动Close()关闭会话同时整个流程包裹在try/catch中任何异常如设备无调制解调器、网络不可达都会以错误消息提示用户最后恢复SendButton.IsEnabled true以便重试。工程组织SharedContent 链接与构建配置该示例并非自包含项目而是通过 MSBuild 链接机制复用仓库根目录SharedContent下的公共文件这是整个 Windows-universal-samples 仓库的统一做法仓库顶层说明有明确交代。从 UssdProtocol.csproj 可见其定位方式SharedContentDir$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), LICENSE))\SharedContent/SharedContentDir项目随后以Compile、Page、Content链接形式引入$(SharedContentDir)下的文件包括App.xaml.cs、MainPage.xaml.cs、MainPage.xaml、Styles.xaml、Default.rd.xml以及 SDK 图标资产等见 UssdProtocol.csproj。这意味着必须解压/克隆整个仓库才能构建本示例单独下载示例目录会因找不到 SharedContent 而编译失败MainPage与场景导航框架来自 SharedContent/cs/MainPage.xaml.cs示例自身的SampleConfiguration.cs只负责向该框架注册场景。构建配置方面解决方案文件预置了Debug/Release×x86/x64/ARM共 6 种平台组合项目文件的默认平台为x86目标平台标识为 UAPUniversal Windows Platform并引用Microsoft.NETCore.UniversalWindowsPlatform 5.0.0包Release 配置下启用 .NET Native 工具链。构建与运行示例构建步骤若以 ZIP 方式下载务必解压整个压缩包而非仅示例子文件夹以保证 SharedContent 依赖完整启动 Visual Studio选择FileOpenProject/Solution定位到解压目录下的Samples\UssdProtcol\cs子目录双击 UssdProtocol.sln按CtrlShiftB或选择BuildBuild Solution编译。仓库顶层说明还建议Visual Studio 中平台目标默认可能是 ARM在非 ARM 设备上测试时需手动切换为 x64 或 x86见 README.md。运行与部署仅部署选择BuildDeploy Solution部署并调试运行按F5或选择DebugStart Debugging部署但以非调试模式运行按CtrlF5或选择DebugStart Without Debugging。运行后在界面输入运营商规定的 USSD 代码如余额查询码并点击Send应用将调用SendMessageAndGetReplyAsync与网络交互结果码、回复文本或编码方案信息会显示在状态栏中。使用注意事项与限制总结综合原文档与源码实现使用该示例及 USSD API 时有以下几点必须牢记消息与运营商强相关USSD 消息内容由移动宽带运营商定义在真实网络上使用必须选择与当前运营商匹配的代码否则请求将被拒绝或返回失败结果码无法通过 WACKcellularDeviceControl属特殊功能示例不可用于 Store 认证流程仅适合运营商/授权开发场景Phone 设备不支持USSD API 在手机端无实际功能示例面向带 GSM 调制解调器的 Windows 10 桌面设备多账户需自行选择示例默认取AvailableNetworkAccountIds的第一个账户多 SIM/多账户设备上应根据业务需要改用MobileBroadbandAccount的账户选择 API编码处理需兜底回复消息编码不受 Windows 支持时应依据DataCodingScheme与GetPayload原始字节自行解码不能假设PayloadAsText永远非空。掌握以上要点后你便可以在自己的 UWP 移动宽带应用中完整复现 USSD 账户管理交互流程并将本示例的请求/响应模式直接迁移到余额查询、套餐变更等真实业务场景中。赞分享示例工程【免费下载链接】Windows-universal-samplesAPI samples for the Universal Windows Platform.项目地址https://gitcode.com/gh_mirrors/wi/Windows-universal-samples点击查看免费下载相关推荐OnnxStream源码深度解读核心操作符实现与执行流程OnnxStream源码深度解读核心操作符实现与执行流程 OnnxStream是一款轻量级ONNX推理库采用C编写能够在资源受限设备上高效运行各类ON示例工程competitive-ads-extractor 实战指南用 Codex Skill 从广告库提取并剖析竞品广告策略competitive ads extractor 实战指南用 Codex Skill 从广告库提取并剖析竞品广告策略 本篇技术指南围绕开源仓库 awesom示例工程UWP 应用数据存储实战Windows-universal-samples 之 ApplicationData 示例深度解析UWP 应用数据存储实战Windows universal samples 之 ApplicationData 示例深度解析 导读 本文以 Windows u示例工程上一篇深度解析开源项目的智能管理方案Scarab《空洞骑士》模组管理器实战指南下一篇Pyrefly check 命令错误处理与诊断输出格式完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Web FUZZ实战:从路径探测到敏感文件泄露的精准策略 1. 这不是“黑盒扫描”,而是一场有策略的Web资产侦察战你手头有一套刚上线的内部管理系统,域名看着规整,目录结构也做了基础隐藏,但老板一句“再挖深点,别漏了敏感接口”,就把你推到了FUZZ实战的第一线。这… · 2026/9/25 10:27:31
Suricata网络入侵检测系统毕业设计实战:从部署到可视化看板 简介:这是一套面向毕业设计的Suricata网络入侵检测系统源码包,适合信息安全、网络工程方向学生用于课程设计、毕业答辩或实战演练。项目基于C语言内核并辅以Python脚本、Shell部署工具,覆盖规则引擎、TCP流重组、HTTP/DNS/SMTP等应用层协议解… · 2026/9/25 10:27:31
鲲鹏服务器迁移实战:从零搭建DevKit持续集成部署流水线 这两年越来越多的业务系统往鲲鹏服务器上迁移,但CI/CD这块,很多团队还是老办法:在x86机器上构建,人工拷到鲲鹏环境部署。本地跑一两个功能样例看着没事,一到生产就冒出一堆架构不兼容、依赖缺包、镜像拉错的怪问题。我… · 2026/9/25 10:58:30
寒假Python编程集训复盘:从语法基础到数据项目实战的完整路径 2026年2月27日下午四点半,最后一个学生把作品文档拖进共享盘,教室安静了几秒,然后有人拍了一下桌子,喊了句“终于搞完了”。我站在讲台边上,看着这二十来个孩子从两周前的“写代码像挤牙膏”,到刚刚走上台对… · 2026/9/25 10:58:30
让AI助手在服务器上7×24小时在线:Docker部署Kiro Crew完整教程(多架构镜像+数据持久化) 让AI助手在服务器上724小时在线:Docker部署Kiro Crew完整教程(多架构镜像数据持久化) 【免费下载链接】KiroCrew A persistent workspace for development work that self-improves and continues beyond one session. 项目地址: https://g… · 2026/9/25 10:58:30
面向AI Agent的技能库设计:从零搭建可复用的工具调用体系 1. 项目概述与我的动手初衷1.1 这个“agent-skills”到底解决什么问题先说结论:agent-skills 不是给普通用户拿来即用的App,也不是一个开箱即跑的命令行工具,而是面向AI Agent的一套“技能包/工具集”设计思路与实现方案。它的核心目标是把Ag… · 2026/9/25 10:57:59
Atlas 300V 24G部署YOLO全攻略:昇腾推理卡从环境到优化 1. 先回答那个热搜问题:Atlas 300V 24G到底是不是加速卡先说结论:是的,而且是正儿八经的AI推理加速卡,不是显卡、不是训练卡,也不是什么"看起来很厉害的普通计算卡"。很多人第一次看到这个名字,尤… · 2026/9/25 10:57:47
Agent Skills实战:从技能定义到调度执行的完整指南 聊一个最近在AI应用开发里绕不开的东西:agent-skills。说白了,就是给大模型配一套可复用的技能模块,让它不再只停留在“聊天”层面,而是能真正动手干活——查资料、算数据、发消息、操作文件、拉取第三方接口,甚至按一… · 2026/9/25 10:57:47
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37