HarmonyOS鸿蒙Next中系统调用连接指定wifi的代码,系统会马上切换wifi,弹窗又会底部重新弹出,求助!!

HarmonyOS鸿蒙Next中系统调用连接指定wifi的代码,系统会马上切换wifi,弹窗又会底部重新弹出,求助!! 需求背景是要连接 Iot设备发出的AP热点。

同样的代码在oppo,vivo,小米手机上面运行正常,在华为(Android和鸿蒙系统)手机上面测试发现,弹窗后点击连接指定wifi,系统会马上切换wifi,弹窗又会底部重新弹出。

请问华为手机在连接指定wifi的时候需要怎么做,现在感觉像是华为手机的适配问题,Android和鸿蒙系统都存在此问题。

以下为实现代码

private fun android10andMoreVersionsWithoutOuterInternet(wifiSSID: String, wifiPassword: String?) {
    // Android 10 (API level 29) -- Android Q (Android 10)
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        val wifiNetworkSpecifier = WifiNetworkSpecifier.Builder()
            .setSsid(wifiSSID)
            .setWpa2Passphrase(wifiPassword?:"")
            .build()

        val networkRequest = NetworkRequest.Builder()
            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
            .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
            .setNetworkSpecifier(wifiNetworkSpecifier)
            .build()
        connectivityManager =
            BaseApplication.getInstance()?.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

        networkCallback = object : ConnectivityManager.NetworkCallback() {
            override fun onAvailable(network: Network) {
                Log.d("xxxxxx", "Network available   onAvailable")
                super.onAvailable(network)
                connectivityManager?.bindProcessToNetwork(network)
                gotoNextScreen()
            }

            override fun onUnavailable() {
                Log.d("xxxxxx", "Network unavailable  onUnavailable")
                super.onUnavailable()
                callback?.onFail()
            }

            override fun onLosing(network: Network, maxMsToLive: Int) {
                Log.d("xxxxxx", "onLosing")
                super.onLosing(network, maxMsToLive)
            }

            override fun onLost(network: Network) {
                Log.d("xxxxxx", "onLost")
                super.onLost(network)
            }

        }
        connectivityManager?.requestNetwork(networkRequest, networkCallback!!)
    }
}

以下为手机型号

手机型号1

手机型号2

希望华为的大大们 帮忙看看,小弟比较急


更多关于HarmonyOS鸿蒙Next中系统调用连接指定wifi的代码,系统会马上切换wifi,弹窗又会底部重新弹出,求助!!的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

遇到相同问题,你解决了吗

更多关于HarmonyOS鸿蒙Next中系统调用连接指定wifi的代码,系统会马上切换wifi,弹窗又会底部重新弹出,求助!!的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


您好,您的问题需要进一步分析,请您通过在线提单进一步解决:https://developer.huawei.com/consumer/cn/support/feedback/#/,感谢您的反馈和支持。

在HarmonyOS鸿蒙Next中,系统调用连接指定WiFi的代码时,可能会遇到系统立即切换WiFi并导致弹窗重新弹出的问题。这通常是由于系统在切换WiFi时触发了网络状态变更事件,导致UI重新渲染或弹窗重新弹出。

要解决这个问题,可以通过以下方式:

  1. 异步处理连接:在调用连接WiFi的代码时,确保使用异步方式处理网络连接操作,避免阻塞主线程导致UI刷新。

  2. 监听网络状态:在连接WiFi之前,注册网络状态变化的监听器,确保在连接成功后进行相应的UI更新或弹窗控制。

  3. 延迟弹窗:在连接WiFi后,设置一定的延迟时间再进行弹窗显示,避免因网络切换过快导致弹窗重复弹出。

示例代码片段:

import wifi from '@ohos.wifi';

async function connectToWifi(ssid: string, password: string) {
    try {
        const config = {
            ssid: ssid,
            preSharedKey: password,
            isHiddenSsid: false
        };
        await wifi.connectToNetwork(config);
        // 延迟弹窗
        setTimeout(() => {
            showPopup();
        }, 1000);
    } catch (error) {
        console.error('Failed to connect to WiFi:', error);
    }
}

function showPopup() {
    // 弹窗逻辑
}

通过上述方式,可以有效避免系统在切换WiFi时弹窗重复弹出的问题。

在HarmonyOS鸿蒙Next中,系统调用连接指定WiFi的代码后,系统会立即尝试切换WiFi。如果弹窗在底部重新弹出,可能是由于网络切换过程中触发了某些事件或回调。建议检查网络状态监听器或相关回调函数,确保在WiFi切换完成后正确处理UI更新。同时,确保没有重复调用连接WiFi的代码,避免多次触发弹窗。

回到顶部