我如何获得网络状态?

时间:2016-04-27 17:50:39

标签: android ios react-native

在本机反应中,有没有办法获取设备的网络状态?例如,我想知道当前设备是在线还是离线。此外,我想检测设备何时联机或脱机,以便向用户或我需要运行的任何其他进程显示消息。

到目前为止,我所能找到的只是向API发送请求,并设置catch回调到fetch,如果catch回调没有连接这会似乎有效,但我想知道是否有更好的解决方法。

我还想知道设备是使用wifi还是连接。

任何帮助?

2 个答案:

答案 0 :(得分:5)

NetInfo API

看看React Natives NetInfo API。以下示例是从官方文档中复制的:

const ConnectionInfoCurrent = React.createClass({
  getInitialState() {
    return {
      connectionInfo: null,
    };
  },
  componentDidMount: function() {
    NetInfo.addEventListener(
        'change',
        this._handleConnectionInfoChange
    );
    NetInfo.fetch().done(
        (connectionInfo) => { this.setState({connectionInfo}); }
    );
  },
  componentWillUnmount: function() {
    NetInfo.removeEventListener(
        'change',
        this._handleConnectionInfoChange
    );
  },
  _handleConnectionInfoChange: function(connectionInfo) {
    this.setState({
      connectionInfo,
    });
  },
  render() {
    return (
        <View>
          <Text>{this.state.connectionInfo}</Text>
        </View>
    );
  }
});

答案 1 :(得分:4)

您可以使用连接管理器访问网络状态。您可以使用相同的方法阅读WIFI和移动数据。

public void checkInternet() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();

    if (activeNetwork != null) {
        if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
            Log.d(TAG, "checkInternet: " + "Connected to WIFI");
        } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
            Log.d(TAG, "checkInternet: " + "Connected to Mobile data");
        }
    } else {
        Log.d(TAG, "checkInternet: " + "Not connected");
    }
}

也不要忘记将权限添加到您的清单。

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

希望它有所帮助!