安卓 uni-app uni.connectWifi 连接wifi没有连接失败的标识

安卓 uni-app uni.connectWifi 连接wifi没有连接失败的标识

信息类别 详情
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 windows 10 专业版
HBuilderX类型 正式
HBuilderX版本号 4.87
手机系统 Android
手机系统版本号 Android 16
手机厂商 vivo
手机机型 iq11
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

示例代码:

uni.connectWifi({  
    maunal: false,  
    SSID: wifiItem.SSID,  
    partialInfo: true,  
    password: "tusstar9971",  
    success:(res)=>{  
        console.log("success: " + JSON.stringify(res));  
    },  
    fail: (err) => {  
        console.log("err: ", JSON.stringify(err))  
    },  
    complete: (res) => {  
        console.log("complete: " + JSON.stringify(res));  
    }  
});

操作步骤:

执行获取wifiList,获取到wifiList后选择其中一个wifi的SSID和输入密码进行连接

预期结果:

输入错误密码,执行fail,返回错误信息,输入正确密码,执行success,返回成功信息

实际结果:

输入错误密码,执行success,返回成功信息,输入正确密码,执行success,返回成功信息

bug描述:

以下代码手机调试,连接wifi,不论连接成功还是密码错误连接失败,都会执行success和完成回调,不会执行fail,不会返回失败信息。

selfConnectWifi(wifiItem) {  
    let _that = this;  
    uni.connectWifi({  
        maunal: false,  
        SSID: wifiItem.SSID,  
        partialInfo: true,  
        password: "tusstar9971",  
        success:(res)=>{  
            console.log("success: " + JSON.stringify(res));  
        },  
        fail: (err) => {  
            console.log("err: ", JSON.stringify(err))  
        },  
        complete: (res) => {  
            console.log("complete: " + JSON.stringify(res));  
        }  
    });  
}

更多关于安卓 uni-app uni.connectWifi 连接wifi没有连接失败的标识的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

该bug反馈内容基本完整,包含标题、详细描述、代码示例、复现步骤、预期与实际结果及分类信息。但存在两个关键问题:代码示例中maunal拼写错误(应为manual),且未说明测试时使用的Android系统具体版本(用户称Android 16,但实际Android大版本最高为14,可能是笔误)。
根据知识库分析,bug成立原因如下:

知识库明确说明App-Android平台差异:“android10以上版本仅支持manual手动连接”。用户设备为Android 16(实为Android 14+),却设置manual: false(拼写错误导致参数未生效),这违反了平台限制。
当Android 10+设备使用manual: false时,系统会强制转为手动连接模式,但API未正确触发fail回调,属于底层实现缺陷。

建议解决方案:

修正拼写错误:将maunal改为manual
Android 10+设备必须设置manual: true(跳转到系统设置页连接)
升级HBuilderX至最新版(当前4.87较旧),新版本可能已优化此逻辑
参考connectWifi文档确认参数规范

该问题非误报,但需用户调整代码适配Android高版本限制。若需自动连接功能,建议改用uni.getWifiList获取列表后引导用户手动连接。 内容为 AI 生成,仅供参考

更多关于安卓 uni-app uni.connectWifi 连接wifi没有连接失败的标识的实战教程也可以访问 https://www.itying.com/category-93-b0.html


不论官方文档还是使用示例,参数都为 maunal

改用uni.onWifiConnected监听连接结果试试

这是一个已知的Android平台上的问题。uni.connectWifi API在Android端存在回调机制不完善的情况,具体表现为:

  1. 回调触发逻辑异常:无论连接成功还是失败(如密码错误),都只会触发success回调,不会触发fail回调。

  2. 返回状态不准确:在success回调的返回结果中,errMsg字段可能显示为"connectWifi:ok",但实际上连接并未成功建立。

当前解决方案:

1. 使用状态监听替代回调判断

建议通过uni.onWifiConnected()监听WiFi连接状态变化,而不是依赖connectWifi的回调结果:

// 监听WiFi连接状态变化
uni.onWifiConnected((res) => {
    console.log('WiFi连接状态变化:', res);
    if (res.wifi && res.wifi.SSID === targetSSID) {
        // 连接成功
    } else {
        // 连接失败或断开
    }
});

// 尝试连接WiFi
uni.connectWifi({
    SSID: wifiItem.SSID,
    password: "tusstar9971",
    success: (res) => {
        console.log("connectWifi调用成功,实际连接状态需通过监听判断");
    }
});

2. 添加超时检测机制

由于连接过程可能需要时间,可以设置超时检测:

selfConnectWifi(wifiItem) {
    const targetSSID = wifiItem.SSID;
    const timeout = 10000; // 10秒超时
    
    // 设置超时检测
    const timeoutId = setTimeout(() => {
        console.log('WiFi连接超时');
        // 处理超时逻辑
    }, timeout);
    
    // 监听连接状态
    const connectedCallback = (res) => {
        if (res.wifi && res.wifi.SSID === targetSSID) {
            clearTimeout(timeoutId);
            uni.offWifiConnected(connectedCallback);
            console.log('连接到目标WiFi成功');
        }
    };
    
    uni.onWifiConnected(connectedCallback);
    
    // 发起连接
    uni.connectWifi({
        SSID: targetSSID,
        password: "tusstar9971",
        success: (res) => {
            console.log("connectWifi API调用成功");
        }
    });
}

3. 检查返回的wifi对象

success回调中,可以检查返回的wifi对象状态:

uni.connectWifi({
    SSID: wifiItem.SSID,
    password: "tusstar9971",
    success: (res) => {
        console.log("返回结果:", res);
        // 虽然总是进入success,但可以检查wifi对象
        if (res.wifi) {
            console.log("当前WiFi信息:", res.wifi);
        }
    }
});
回到顶部