uni-app 使用国内环境调用uni-wifi插件打包成apk 在国外手机上 uni.onGetWifiList 监听WiFi列表不执行

发布于 1周前 作者 gougou168 来自 Uni-App

uni-app 使用国内环境调用uni-wifi插件打包成apk 在国外手机上 uni.onGetWifiList 监听WiFi列表不执行

示例代码:

onLoad(() => {  
    uni.showLoading({  
        title:'WIFI loading...'  
    })  
    startWifiFun()  
    onGetWifiListFun()  
});  

// 初始化wifi  
function startWifiFun(){  
    uni.startWifi({  
        success: (res) => {  
            getWifiListFun()  
            console.log('启动wifi 成功', res)  
        },  
        fail: (err) => {  
            console.error('启动wifi 失败', err)  
            uni.showModal({ content: err.errMsg, showCancel: false })  
        },  
    })  
}  

/** 获取wifi列表, ios和android 各不相同,具体看顶部资料 */  
function getWifiListFun() {  
    uni.getWifiList({  
        success: (res) => {  
            uni.hideLoading()  
            console.log('获取wifi列表命令发送 成功', res)  
        },  
        fail: (err) => {  
            uni.hideLoading()  
            console.error('获取wifi列表 失败', err)  
            uni.showModal({ content: err.errMsg, showCancel: false })  
        },  
    })  
}  

/** 监听获取wifi列表 */  
function onGetWifiListFun() {  
    uni.showLoading({  
        title:'loading...'  
    })  
    uni.onGetWifiList((res) => {  
        console.log('监听获取wifi列表', res)  
    })  
}  

操作步骤:

  • 复制代码打包运行uni.onGetWifiList不执行

预期结果:

  • 复制代码打包运行uni.onGetWifiList需要执行抓取到设备附件的WiFi列表

实际结果:

  • 需要显示出来WiFi列表

bug描述:

在页面上调用第一步:uni.startWifi()初始化WiFi 第二步:uni.getWifiList()请求获取 Wi-Fi 列表。第三步:uni.onGetWifiList监听获取到 Wi-Fi 列表数据事件。现在的问题是 国行手机能正常监听到wifi 海外版手机(印度版)第三步监听事件不执行


1 回复

在uni-app中使用uni-wifi插件调用WiFi相关功能时,确实可能会遇到因为地域限制或系统权限问题导致的功能异常。尤其是在国内环境下开发的应用打包成APK后,在国外手机上运行时可能会遇到uni.onGetWifiList监听WiFi列表不执行的问题。这通常是由于Android系统的权限管理和地区差异导致的。

以下是一个基于uni-app和uni-wifi插件的示例代码,展示了如何请求WiFi列表并处理可能的权限问题。请注意,这个示例代码本身并不能直接解决地域限制问题,但可以确保你的应用在请求WiFi列表时正确处理权限和回调。

// 引入uni-wifi插件
const wifi = require('uni-wifi.js');

// 检查并请求位置权限(Android 6.0及以上需要动态请求)
#ifdef APP-PLUS
if (plus.android && plus.android.importClass) {
    const Context = plus.android.importClass('android.content.Context');
    const PackageManager = plus.android.importClass('android.content.pm.PackageManager');
    const ActivityCompat = plus.android.importClass('android.support.v4.app.ActivityCompat');
    const permission = 'android.permission.ACCESS_FINE_LOCATION';

    if (ActivityCompat.checkSelfPermission(plus.android.runtimeMainActivity(), permission) !== PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(plus.android.runtimeMainActivity(), [permission], 1);
    } else {
        getWifiList();
    }
} else {
    getWifiList();
}
#endif

function getWifiList() {
    wifi.getWifiList({
        success: function (res) {
            console.log('WiFi列表:', res.wifiList);
        },
        fail: function (err) {
            console.error('获取WiFi列表失败:', err);
        }
    });

    // 监听WiFi列表变化
    uni.onGetWifiList(function (res) {
        console.log('WiFi列表变化:', res.wifiList);
    });
}

// 注意:在实际应用中,应处理权限请求结果的回调,根据用户是否授权来决定后续操作。
// 例如,如果用户拒绝授权,可以提示用户该权限对于应用功能的重要性,并引导用户去设置中手动开启。

在这个示例中,我们首先检查并请求了位置权限(因为获取WiFi列表通常需要位置权限)。然后,我们调用wifi.getWifiList方法来获取WiFi列表,并使用uni.onGetWifiList来监听WiFi列表的变化。

然而,需要注意的是,如果应用在国外手机上因为地域限制而无法获取WiFi列表,这段代码可能仍然无法正常工作。此时,你可能需要考虑在应用内添加相应的提示信息,告知用户该功能可能因地域限制而无法使用,或者尝试联系uni-app和uni-wifi插件的开发者寻求更具体的解决方案。

回到顶部