在本机反应中,有没有办法获取设备的网络状态?例如,我想知道当前设备是在线还是离线。此外,我想检测设备何时联机或脱机,以便向用户或我需要运行的任何其他进程显示消息。
到目前为止,我所能找到的只是向API发送请求,并设置catch
回调到fetch
,如果catch
回调没有连接这会似乎有效,但我想知道是否有更好的解决方法。
我还想知道设备是使用wifi还是连接。
任何帮助?
答案 0 :(得分:5)
看看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" />
希望它有所帮助!