react-native 获取网络状态

来源:互联网 发布:微信扫二维码抽奖软件 编辑:程序博客网 时间:2024/06/05 09:11

ReactNative 中有 个模块NetInfo,可以获取设备的联网或者离线状态。

有如下几个方法:

//获知设备联网或离线的状态信息NetInfo.fetch().done((reach) => {    //   alert(reach);});
这个reach为获取到的网络状态,有如下字段:

IOS

以异步的方式判断设备是否联网,以及是否使用了移动数据网络。

  • none - 设备处于离线状态。
  • wifi - 设备处于联网状态且通过wifi链接,或者是一个iOS的模拟器。
  • cell - 设备是通过Edge、3G、WiMax或是LTE网络联网的。
  • unknown - 发生错误,网络状况不可知

Android

请求网络信息需要先在应用的AndroidManifest.xml文件中添加如下权限字段:

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

Android的联网类型:

  • NONE - 设备处于离线状态
  • BLUETOOTH - 蓝牙数据连接
  • DUMMY - 模拟数据连接
  • ETHERNET - 以太网数据连接
  • MOBILE - 移动网络数据连接
  • MOBILE_DUN - 拨号移动网络数据连接
  • MOBILE_HIPRI - 高优先级移动网络数据连接
  • MOBILE_MMS - 彩信移动网络数据连接
  • MOBILE_SUPL - 安全用户面定位(SUPL)数据连接
  • VPN - 虚拟网络连接。需要Android5.0以上
  • WIFI - WIFI数据连接
  • WIMAX - WiMAX数据连接
  • UNKNOWN - 未知数据连接

其他的连接状态已被Android API隐藏,但可以在需要时使用。

因为平台不同导致大小写判断不一致,可以采用如下方式来写:

NetInfo.fetch().done((status) => {    if (status !== 'none' || status !== 'NONE') {        this._getNetData();    } else {        this.refs.toast.show('网络异常', DURATION.LENGTH_LONG);    }})
或者 用方法转换大小写统一判断:

NetInfo.fetch().done((status) => {    if (status.toLowerCase() !== 'none') {        this._getNetData();    } else {        this.refs.toast.show('网络异常', DURATION.LENGTH_LONG);    }})

toLowCase(),toUpperCase()分别为将字符串转换为小写或大写,使用方式为:

String.toLowCase(),  返回一个字符串。

还有另一种方式:

//检查网络是否链接 返回true/faseNetInfo.isConnected.fetch().done((iscon) => {    alert(iscon);})
以及只支持安卓平台的:

isConnectionExpensive

此方法仅Android可用。用于判断当前活动的连接是否计费。如果当前连接是通过移动数据网络,或者通过基于移动数据网络所创建的wifi热点,都有可能被判定为计费的数据连接。

NetInfo.isConnectionExpensive((isConnectionExpensive) => {  console.log('Connection is ' + (isConnectionExpensive ? 'Expensive' : 'Not Expensive'));});

最后介绍一个监听网络状态变化的:

//监听网络变化状态NetInfo.isConnected.addEventListener('isCon', (a) => {    //  alert(a);});

每当网络状态变化的时候,都会触发那个回调方法。 参数就是返回的网络状态,