返回 导航

React / React Native

hangge.com

React Native - 使用NetInfo获取网络信息(是否联网、当前网络状态)

作者:hangge | 2017-04-04 08:10
React Native 中,NetInfo API 为我们提供了获取网络状态的方法。通过 NetInfo 我们可以检测到手机客户端设备当前的联网/断网状态。

1,NetInfo提供的属性和方法

  • isConnected:表示网路是否连接
  • fetch():获取网络状态
  • addEventListener():添加事件监听
  • removeEventListener():删除事件监听

2,获取的网络状态类型

上面提到使用 fetch() 方法可以获取到网络状态,在不同的平台下可能得到的状态值是不一样的。
(1)iOS 平台
  • none:离线状态
  • wifi:在线状态,并且是连接的 wifi 网络,或者当前是 iOS 模拟器
  • cell :在线状态,通过连接 Edge3GWiMax 或者 LET 网络
  • unknown :该检测发生异常错误,或者网络状态未知

(2)Android 平台
  • NONE:设备没有网络连接
  • BLUETOOTH:蓝牙数据连接
  • DUMMY:虚拟数据连接
  • ETHERNET:以太网数据连接
  • MOBILE:手机移动网络数据连接
  • MOBILE_DUN:拨号移动网络数据连接
  • MOBILE_HIPRI:高权限的移动网络数据连接
  • MOBILE_MMS:彩信移动网络数据连接
  • MOBILE_SUPL:SUP网络数据连接
  • VPN:虚拟网络连接 ,最低支持 Android API 21 版本
  • WIFI:无线网络连接
  • WIMAX:wimax网络连接
  • UNKNOWN:未知网络数据连接

3,使用样例

(1)程序启动后自动获取网络连接情况,以及网络状态。并显示在界面上。
(2)同时添加了网络改变事件监听,如果联网状态有变的话会实时显示在界面上。
import React, {Component} from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  NetInfo
} from 'react-native';

//默认应用的容器组件
class App extends Component {
    //构造函数
    constructor(props) {
        super(props);
        this.state = {
            isConnected: null,
            connectionInfo: null
        };
    }

    //页面的组件渲染完毕(render)之后执行
    componentDidMount() {
        //检测网络是否连接
        NetInfo.isConnected.fetch().done((isConnected) => {
            this.setState({isConnected});
        });

        //检测网络连接信息
        NetInfo.fetch().done((connectionInfo) => {
            this.setState({connectionInfo});
        });

        //监听网络变化事件
        NetInfo.addEventListener('change', (networkType) => {
            this.setState({isConnected: networkType})
        })
    }

    //渲染
    render() {
        return (
            <View style={styles.container}>
                <Text style={styles.welcome}>
                    当前的网络状态:
                    {this.state.isConnected ? '网络在线': '离线'}
                </Text>
                <Text style={styles.welcome}>
                    当前网络连接类型: {this.state.connectionInfo}
                </Text>
                <Text style={styles.welcome}>
                    当前连接网络是否计费:
                    {NetInfo.isConnectionExpensive === true ? '需要' : '不要'}
                </Text>
            </View>
        );
    }
}

//样式定义
const styles = StyleSheet.create({
    container: {
        flex: 1,
        paddingTop: 30
    },
    welcome: {
        fontSize: 16,
        textAlign: 'left',
        margin: 10
    }
});

AppRegistry.registerComponent('HelloWorld', () => App);
评论

全部评论(0)

回到顶部