2016-04-27 8 views
1

В реале native, есть ли способ получить статус сети устройства? Например, я хотел бы знать, находится ли текущее устройство в сети или в автономном режиме. Также я хотел бы обнаружить, когда устройство подключается к сети или в автономном режиме, чтобы показать сообщение пользователю или любой другой процесс, который мне нужно запустить.Как я могу получить статус сети?

До сих пор все, что я мог найти, чтобы отправить запрос в API, а также установить catch обратного вызова к fetch, если не подключение catch обратного вызова будет работать, это, кажется, работает, но мне интересно, если есть лучший способ решить эту проблему.

Я также хотел бы знать, использует ли устройство Wi-Fi или соединение lte.

Любая помощь?

ответ

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> 
    ); 
    } 
}); 
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" /> 

Надеюсь, это поможет!

Смежные вопросы