UWP+C#开发:Windows 10 Mobile Enterprise USB数据连接授权检测
检测UWP应用中用户选择USB数据连接的触发逻辑
我之前在开发Win10 Mobile Enterprise的UWP应用时,也碰到过一模一样的需求——系统本身并没有提供“用户选择允许数据连接”的专属事件,但我们可以通过网络状态变化+充电状态结合的方式来实现检测,下面是具体的实现思路和代码示例:
核心思路
当用户选择“允许数据连接”时,手机会通过USB建立一个虚拟以太网连接(通常叫RNDIS或USB Ethernet);而选择“仅供电”时,只有充电状态变化,不会新增网络连接。所以我们可以通过监听网络适配器的变化,结合充电状态来精准判断用户是否选择了数据连接。
具体实现步骤
1. 注册必要的监听事件
我们需要两个关键事件:网络状态变化事件(检测USB网络连接建立)和电池报告更新事件(验证设备处于充电状态,排除其他网络变化干扰)
using Windows.Networking.Connectivity; using Windows.Devices.Power; using System.Diagnostics; using Windows.UI.Core; // 在页面构造函数或应用初始化时注册事件 public MainPage() { this.InitializeComponent(); // 监听网络状态变化 NetworkInformation.NetworkStatusChanged += NetworkInformation_NetworkStatusChanged; // 监听电池充电状态变化(可选,用于提高判断准确性) Battery.AggregateBattery.ReportUpdated += AggregateBattery_ReportUpdated; }
2. 处理网络状态变化事件
在网络状态变化时,枚举所有网络连接配置,筛选出USB以太网类型的连接:
private async void NetworkInformation_NetworkStatusChanged(object sender) { // 获取所有当前的网络连接配置文件 var connectionProfiles = NetworkInformation.GetConnectionProfiles(); foreach (var profile in connectionProfiles) { // 检查是否是已连接到互联网的USB以太网 if (profile.GetNetworkConnectivityLevel() == NetworkConnectivityLevel.InternetAccess && profile.NetworkAdapter.IanaInterfaceType == 6 && // IANA以太网类型标识为6 profile.NetworkAdapter.Name.IndexOf("USB", StringComparison.OrdinalIgnoreCase) >= 0) { // 这里就是用户选择允许数据连接的触发点 await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { // 在这里执行你的业务逻辑,比如更新UI、启动数据同步等 Debug.WriteLine("用户已允许USB数据连接!"); // 示例:显示提示 StatusTextBlock.Text = "USB数据连接已建立"; }); return; } } }
3. 结合充电状态验证(可选)
如果需要排除其他以太网连接的干扰,可以结合电池充电状态来确认是USB连接触发的变化:
private bool IsDeviceCharging { get; set; } private void AggregateBattery_ReportUpdated(Battery sender, object args) { var batteryReport = sender.GetReport(); // 更新当前充电状态 IsDeviceCharging = batteryReport.Status == BatteryStatus.Charging; }
然后在网络事件处理里,加上IsDeviceCharging的判断,就能让逻辑更精准。
权限配置
别忘了在Package.appxmanifest中添加必要的网络权限:
- 勾选
internetClient(允许访问互联网) - 勾选
privateNetworkClientServer(允许访问私有网络,包括USB虚拟以太网)
注意事项
- 部分定制化的Win10 Mobile Enterprise设备可能会修改USB以太网适配器的名称,比如用“RNDIS”而非“USB”,可以根据实际设备调整
profile.NetworkAdapter.Name的判断条件,或者检查NetworkAdapter.Description属性。 - 当用户断开USB后重新连接并选择数据连接,这个逻辑依然能正常触发。
内容的提问来源于stack exchange,提问作者tj94
相关产品推荐
相关产品推荐

