uniapp监听网络状态 - 判断是否有网络
由于新机首次安装app的时候会出现:请求网络权限“是否允许使用数据”,如果用户很长时间没点击允许,就会出现app内接口请求永远返回失败的情况,需要用户清掉APP重新打开才能正常请求使用。
为解决这类问题,我们就需要监听网络状态,这边文章主要介绍uniapp判断是否有网,监听网络状态的问题,fly63前端网为大家介绍3种实现方案。
方法一:uni.getNetworkType
该方法用于获取网络类型。
uni.getNetworkType({
success: res=> {
if(res.networkType === "none"){//网络类型 wifi、2g、3g、4g、ethernet、unknown、none
console.log("当前无网络");
return;
}
console.log("有网络");
}
});在实际使用时候,我们就需要用到定时器或者递归的方式来判断是否有网,等有网就进行相应请求操作,比如:
getNetwork(cb,time=300){
uni.getNetworkType({
success: function (res) {
if(res.networkType === "none"){//当前无网络
setTimeout(()=>{
this.getNetwork(cb);
},time);
return;
}
typeof cb=="function" && cb()
}
});
}方法二:plus.networkinfo
使用html5+的plus下networkinfo模块用于获取网络信息。其中getCurrentType用于获取设备当前连接的网络类型:
getNetworkType() {
let types = {};
types[plus.networkinfo.CONNECTION_UNKNOW] = "Unknown";
types[plus.networkinfo.CONNECTION_NONE] = "None";
types[plus.networkinfo.CONNECTION_ETHERNET] = "Ethernet";
types[plus.networkinfo.CONNECTION_WIFI] = "WiFi";
types[plus.networkinfo.CONNECTION_CELL2G] = "2G";
types[plus.networkinfo.CONNECTION_CELL3G] = "3G";
types[plus.networkinfo.CONNECTION_CELL4G] = "4G";
console.log("Network: " + types[plus.networkinfo.getCurrentType()]);
}方法三:uni.onNetworkStatusChange
经测试发现:该方法是无法实现监听的,官网所说的监听是指网络变化的时候被调用,实现监听要配合两个api使用:
uni.onNetworkStatusChange(res=>{
if(res.networkType=='none'){//res.networkType网络类型 wifi、2g、3g、4g、ethernet、unknown、none
console.log("当前无网络")
return;
}
console.log("有网络")
});本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!