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

Xamarin.Android调用ScanResult.WifiStandard报NoSuchMethodError求助

问题根因

这个报错不是Xamarin/微软侧的组件缺陷,原因是WifiStandard属性对应的Android原生ScanResult.getWifiStandard()方法是Android 11(API Level 30)才新增的API,你测试用的设备搭载的是Android 8.0(API Level 26),系统底层不存在该方法,所以直接调用就会抛出NoSuchMethodError链接错误。


修复方案

1. 新增API版本兼容判断

首先在调用WifiStandard前先判断当前设备的系统版本,只有符合要求才直接调用该属性:

public override void OnReceive(Context ctx, Intent intent) {
    creator.current_wifi_list = wifiManager.ScanResults.Select(p => {
        WifiStandard standard;
        if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.R) {
            standard = (WifiStandard)p.WifiStandard;
        } else {
            standard = GetWifiStandardByFrequency(p.Frequency);
        }
        return new wifiInfo(p.Bssid.ToUpper(), p.Ssid, p.Level, standard);
    }).ToList();
}

2. 低版本替代实现(通过频段判断WiFi标准)

低版本系统可以通过ScanResult.Frequency字段判断对应的WiFi标准,实现方法参考:

private WifiStandard GetWifiStandardByFrequency(int frequency) {
    if (frequency >= 2400 && frequency < 2500) {
        // 2.4G频段 一般为WiFi4(802.11b/g/n)
        return WifiStandard.WifiStandard11n;
    } else if (frequency >= 5150 && frequency < 5850) {
        // 5G频段 一般为WiFi5(802.11ac)
        return WifiStandard.WifiStandard11ac;
    } else if (frequency >= 5925 && frequency < 7125) {
        // 6G频段 一般为WiFi6及以上
        return WifiStandard.WifiStandard11ax;
    }
    // 未知频段默认返回未知
    return WifiStandard.WifiStandardUnknown;
}

如果你的wifiInfo类里自定义了WiFi标准枚举,替换返回值为你自己的枚举值即可。


额外注意事项

如果你的应用目标SDK版本低于30,Xamarin的绑定库可能也不会暴露WifiStandard属性,此时需要先将项目的目标Android版本升级到Android 11及以上,编译阶段才不会报错。

内容的提问来源于stack exchange,提问作者Alex A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:21:03