You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:32:47