我们在做移动端项目和手机APP应用时,避免不了要获取用户手机的网络状况。在使用RN技术开发APP时,其内置的NetInfo API就是为了解决这一问题的。下面简单的讲下NetInfo如何使用。
最新的API与以往的有些不同,具体如下:
- `fetch`方法过时了,用`getConnection`替代
- `change`事件过时了,用`connectionchange`替代.
- `fetch`/`change`过时了,用`getConnection`/`connectionchange`替代。
ConnectionType(设备的网络类型):
跨平台:
- none
- 设备处于离线状态。
- wifi
- 设备处于联网状态且通过wifi链接,或者是一个iOS的模拟器。
- cellular
- 设备是通过Edge、3G、WiMax或是LTE网络联网的。
- unknown
- 发生错误,网络状况不可知
Android平台:
- bluetooth
- 蓝牙数据连接
- ethernet
- 以太网数据连接
- wimax
- WiMAX数据连接
EffectiveConnectionType(无线网络类型) :
- 2g
- 3g
- 4g
- unknown
import assign from 'object-assign';
import { observer } from 'mobx-react';
import {
action,
observable,
} from 'mobx';
import {
NetInfo,
} from 'react-native'; @observable
localState = {
tipMessage: '',
continueBtnText: '',
connectionType: null,// none,wifi,cellular,unknown
effectiveConnectionType: null,// 2g,3g,4g,unknown
}; @action
updateLocalState = (part) => {
assign(this.localState, part);
}; componentDidMount() {
NetInfo.addEventListener(
'connectionChange',
this.handleConnectionInfoChange,
);
NetInfo.getConnectionInfo().then((connectionInfo) => {
this.updateLocalState({
connectionType: connectionInfo.type,
effectiveConnectionType: connectionInfo.effectiveType,
});
this.NetworkStateJudge();
});
} componentWillUnmount() {
NetInfo.removeEventListener(
'connectionChange',
this.handleConnectionInfoChange,
);
}
// 在网络状况/类型发生变化时调用此函数
handleConnectionInfoChange = (connectionInfo) => {
this.updateLocalState({
connectionType: connectionInfo.type,
effectiveConnectionType: connectionInfo.effectiveType,
});
this.NetworkStateJudge();
};
// 网络状态分类判断
NetworkStateJudge = () => {
if (this.localState.connectionType === 'wifi') {
this.updateLocalState({
tipMessage: '当前wifi信号不好,请尝试重启路由器',
continueBtnText: '重启',
});
} else if (this.localState.connectionType === 'none') {
this.updateLocalState({
tipMessage: '未连接到网络,请先开通WiFi或流量',
continueBtnText: '去开通',
});
} else if (this.localState.effectiveConnectionType !== 'unknown') {
this.updateLocalState({
tipMessage: '当前正在使用非WiFi网络,继续使用将产生费用',
continueBtnText: '继续使用',
});
}
}; render() { return (
<View style={styles.wrap}>
<View style={styles.containWrap}>
<Text style={styles.tipMessage}>{this.localState.tipMessage}</Text>
<TouchableHighlight
style={styles.continueBtn}
>
<Text style={styles.continueBtnText}>{this.localState.continueBtnText}</Text>
</TouchableHighlight>
<Text style={styles.text}>{this.localState.connectionType}</Text>
<Text style={styles.text}>{this.localState.effectiveConnectionType}</Text>
</View>
</View>
);
}
查看更详细使用方法和介绍请参考官网 :https://facebook.github.io/react-native/docs/netinfo.html