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

Xamarin Android应用获取WiFi列表报空引用错误,求解决方案

空引用报错解决方法

核心报错原因

Btn1get_Clicked事件中DependencyService.Get<IWifi>()返回null,是触发空引用的首要原因,其次存在权限缺失、无空值防护等问题,按以下步骤修改即可:


1. 注册DependencyService实现

Xamarin.Forms的依赖服务需要显式注册才能被检索到,在安卓项目的Wifi类所在文件的命名空间外添加注册特性:

// 加在文件最顶部,using语句下方、namespace WifiApp.Droid上方
[assembly: Dependency(typeof(WifiApp.Droid.Wifi))]
namespace WifiApp.Droid
{
    // 原有Wifi类代码不变
}

2. 补全安卓权限配置

打开安卓项目的Properties/AndroidManifest.xml,添加以下权限声明:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

安卓6.0及以上版本需要动态申请定位权限,修改Btn1get_Clicked方法,先申请权限再执行扫描:

public async void Btn1get_Clicked(object sender, EventArgs e)
{
    // 先申请定位权限
    var status = await Permissions.CheckStatusAsync<Permissions.LocationWhenInUse>();
    if (status != PermissionStatus.Granted)
    {
        status = await Permissions.RequestAsync<Permissions.LocationWhenInUse>();
        if (status != PermissionStatus.Granted)
        {
            await DisplayAlert("提示", "需要位置权限才能扫描WiFi", "确定");
            return;
        }
    }

    _wifiService = null;
    // 加判空避免空引用
    var wifiService = DependencyService.Get<IWifi>();
    if (wifiService == null)
    {
        await DisplayAlert("错误", "未找到WiFi服务实现", "确定");
        return;
    }
    _wifiService = await wifiService.GetAvailableNetworksAsync();
    wifilist.ItemsSource = _wifiService;
}

3. 添加空值防护

修改WifiReceiver的OnReceive方法,对扫描结果做判空处理:

public override void OnReceive(Context context, Intent intent)
{
    IList<ScanResult> scanwifinetworks = wifi.ScanResults;
    // 新增判空逻辑
    if (scanwifinetworks == null)
    {
        receiverARE.Set();
        return;
    }
    foreach (ScanResult wifinetwork in scanwifinetworks)
    {
        wifiNetworks.Add(wifinetwork.Ssid);
    }
    receiverARE.Set();
}

4. 额外适配注意事项

  • 安卓10及以上版本需要开启设备定位功能才能扫描到WiFi列表,可提前判断定位是否开启,引导用户打开
  • 安卓13(API 33)及以上版本需要新增NEARBY_WIFI_DEVICES权限,可根据目标SDK版本补充声明

内容的提问来源于stack exchange,提问作者Shalin Gajjar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:06:03