netinfo - CSDN
  • 这个组件已经在RN刚出来(俩平台同时支持)的... - 目前的NetInfo API是分平台的.在iOS和Android平台上返回完全不同的值. - 目前的NetInfo API无法判定连接的手机网络是 2g, 3g, 还是 4g.贡献者为了不造成brea...

    这个组件已经在RN刚出来(俩平台同时支持)的时候就已经存在了,用法大家都已经很熟悉了,但是在0.48+版本中,出现了一些变化,前面的用法都会过期

    主要完善了两个方面的问题

      - 目前的NetInfo API是分平台的.在iOS和Android平台上返回完全不同的值.

      - 目前的NetInfo API无法判定连接的手机网络是 2g, 3g, 还是 4g.


    贡献者为了不造成breaking changes,所以直接新增新的api,将前面的api改为黄色警告
    - `fetch`方法过时了,用`getConnection`替代
    - `change`事件过时了,用`connectionchange`替代.
    - `fetch`/`change`过时了,用`getConnection`/`connectionchange`替代。返回的枚举值也变了。具体查看下面的值 

     ConnectionType(设备的网络类型):

      跨平台:

        - none - 设备处于离线状态。

                - wifi - 设备处于联网状态且通过wifi链接,或者是一个iOS的模拟器。

                - cellular - 设备是通过Edge、3G、WiMax或是LTE网络联网的。

                - unknown - 发生错误,网络状况不可知

         Android平台:

                - bluetooth - 蓝牙数据连接

                - ethernet - 以太网数据连接

                - wimax - WiMAX数据连接

      EffectiveConnectionType(无线网络类型) :

        - 2g 

        - 3g 

        - 4g 

        - unknown

    用法:

    NetInfo.getConnectionInfo().then((connectionInfo) => {
      console.log('Initial, type: ' + connectionInfo.type + ', effectiveType: ' + connectionInfo.effectiveType);
    });
    function handleFirstConnectivityChange(connectionInfo) {
      console.log('First change, type: ' + connectionInfo.type + ', effectiveType: ' + connectionInfo.effectiveType);
      NetInfo.removeEventListener(
        'connectionChange',
        handleFirstConnectivityChange
      );
    }
    NetInfo.addEventListener(
      'connectionChange',
      handleFirstConnectivityChange
    );

     

    方法:

    static addEventListener(eventName, handler) 
     添加一个事件监听.支持如下事件:
       connectionChange: Fires when the network status changes. The argument to the event handler is an object with keys:
          type: ConnectionType类型 (已在上面列出)
          effectiveType: EffectiveConnectionType类型 (已在上面列出)
       change: This event is deprecated. Listen to connectionChange instead. Fires when the network status changes. The argument to the event handler is one of the deprecated connectivity types listed above.
    
    static removeEventListener(eventName, handler) Removes the listener for network status changes.

      static fetch() 

        This function is deprecated. Use getConnectionInfo instead. Returns a promise that resolves with one of the deprecated connectivity types      listed above.


    static getConnectionInfo() Returns a promise that resolves to an object with type and effectiveType keys whose values are a ConnectionType and an EffectiveConnectionType, (described above), respectively. static isConnectionExpensive()

    属性:

    isConnected: ObjectExpression 
    
       An object with the same methods as above but the listener receives a boolean which represents the internet connectivity. Use this if you are only interested with whether the device has internet connectivity.

     

     

     

    isConnected

    适用于所有平台.异步获取一个 boolean 类型的值判定是否连接到网络.

    NetInfo.isConnected.fetch().then(isConnected => {
      console.log('First, is ' + (isConnected ? 'online' : 'offline'));
    });
    function handleFirstConnectivityChange(isConnected) {
      console.log('Then, is ' + (isConnected ? 'online' : 'offline'));
      NetInfo.isConnected.removeEventListener(
        'change',
        handleFirstConnectivityChange
      );
    }
    NetInfo.isConnected.addEventListener(
      'change',
      handleFirstConnectivityChange
    );

     

    转载于:https://www.cnblogs.com/yz1311/p/7651252.html

    展开全文
  • NetInfo.cs

    2016-09-01 09:10:49
    using System;// String,Convert using System.Web;// HttpContext.Current using System.Net;// Dns using System.Net.Sockets;// AddressFamily using System.Text.RegularExpressions;// Regex ...
    using System;// String,Convert
    using System.Web;// HttpContext.Current
    using System.Net;// Dns
    using System.Net.Sockets;// AddressFamily
    using System.Text.RegularExpressions;// Regex
    using System.Management;// 需要在项目中添加System.Management引用
    
    public class NetInfo
    {
        /// <summary>
        /// 构造函数
        /// </summary>
        public NetInfo() { }
    
        /// <summary>
        /// 用户名
        /// </summary>
        public string UserName
        {
            get
            {
                string name = HttpContext.Current.User.Identity.Name;
                return name.Substring(name.IndexOf('\\') + 1);
            }
        }
    
        /// <summary>
        /// 主机名
        /// </summary>
        public string HostName
        {
            get
            {
                string ipAddr = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                if (String.IsNullOrEmpty(ipAddr))
                {
                    ipAddr = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                    if (String.IsNullOrEmpty(ipAddr))
                    {
                        ipAddr = HttpContext.Current.Request.UserHostAddress;
                    }
                }
                return Dns.GetHostEntry(ipAddr).HostName;
            }
        }
    
        /// <summary>
        /// 网络地址
        /// </summary>
        public string NetworkAddress
        {
            get
            {
                string result = null;
                string ipAddr = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                if (String.IsNullOrEmpty(ipAddr))
                {
                    ipAddr = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                    if (String.IsNullOrEmpty(ipAddr))
                    {
                        ipAddr = HttpContext.Current.Request.UserHostAddress;
                    }
                }
                if (Regex.IsMatch(ipAddr, @"((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))"))
                {
                    result = ipAddr;
                }
                else
                {
                    foreach (IPAddress address in Dns.GetHostAddresses(Dns.GetHostName()))
                    {
                        if (address.AddressFamily == AddressFamily.InterNetwork)
                        {
                            result = address.ToString();
                        }
                    }
                }
                return result;
            }
        }
    
        /// <summary>
        /// 物理地址,目前只能显示服务器相应地址,无法显示客户机
        /// </summary>
        public string PhysicalAddress
        {
            get
            {
                string macAddr = String.Empty;
                ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection moc = mc.GetInstances();
                foreach (ManagementObject mo in moc)
                {
                    if ((bool)mo["IPEnabled"] == true)
                    {
                        macAddr = mo["MacAddress"].ToString();
                        break;
                    }
                }
                moc = null;
                mc = null;
                return macAddr;
            }
        }
    
        /// <summary>
        /// 获取网段地址
        /// </summary>
        /// <param name="userIp">网络地址</param>
        /// <param name="userMask">子网掩码</param>
        /// <returns>匹配后的网段地址</returns>
        public string GetSubnet(string userIp, string userMask)
        {
            string[] ip_s = userIp.Split('.');
            string[] mask_s = userMask.Split('.');
            int length = mask_s.Length;
            string result = null;
            bool zero = false;
            for (int i = 0; i < length; i++)
            {
                int ip_n = Convert.ToInt32(ip_s[i]);
                int mask_n = Convert.ToInt32(mask_s[i]);
                int match = ip_n & mask_n;
                if (zero)
                {
                    match = 0;
                    result += match.ToString();
                    if (i != length - 1) result += '.';
                    continue;
                }
                if (match != ip_n)
                {
                    if (mask_n == 0)
                    {
                        result += mask_n.ToString();
                    }
                    else
                    {
                        result += ((ip_n / mask_n) * mask_n).ToString();
                    }
                    zero = true;
                }
                else
                {
                    result += match.ToString();
                }
                if (i != length - 1) result += '.';
            }
            return result;
        }
    
    }
    

    展开全文
  • react native中用NetInfo判断网络状态

    在 React Native 中,NetInfo API 提供了获取网络状态的方法,通过 NetInfo 可以检测到手机设备当前的联网/断网状态。

    1、NetInfo提供的属性和方法

    isConnected:表示网路是否连接

    fetch():获取网络状态

    addEventListener():添加事件监听

    removeEventListener():删除事件监听

    2、获取的网络状态类型

    可使用 fetch() 方法可以获取到网络状态,在不同的平台下可能得到的状态值是不一样的。

    iOS 平台

    none:离线状态

    wifi:在线状态,并且是连接的 wifi 网络,或者当前是 iOS 模拟器

    cell :在线状态,通过连接 Edge、3G、WiMax 或者 LET 网络

    unknown :该检测发生异常错误,或者网络状态未知

    Android平台

    NONE:设备没有网络连接

    BLUETOOTH:蓝牙数据连接

    DUMMY:虚拟数据连接

    ETHERNET:以太网数据连接

    MOBILE:手机移动网络数据连接

    MOBILE_DUN:拨号移动网络数据连接

    MOBILE_HIPRI:高权限的移动网络数据连接

    MOBILE_MMS:彩信移动网络数据连接

    MOBILE_SUPL:SUP网络数据连接

    VPN:虚拟网络连接 ,最低支持 Android API 21 版本

    WIFI:无线网络连接

    WIMAX:wimax网络连接

    UNKNOWN:未知网络数据连接

    3、添加权限字段

    在android目录,找到AndroidManifest.xml文件,添加如下权限字段,获取相关权限:
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    IOS不需要添加任何东西。

    注意: 因修改了Android原生的配置文件,需要重新执行react-native run-android命令。直接reload并不起作用。

    4、判断网络状态样例

    import React, {Component} from 'react';
    import {Platform, StyleSheet, Text, View, NetInfo} from 'react-native';
    
    export default class App extends Component{
        constructor(props){
            super(props);
            this.state={
                connectionInfo: null
            }
        }
    
        componentDidMount() {
          //检测网络连接信息
          //android对应的Wi-Fi、流量、网络未连接分别为: WIFI、MOBILE、NONE
          //IOS对应的Wi-Fi、流量、网络未连接分别为: wifi、(mobile/cell,忘了是哪一个)、none  
          NetInfo.fetch().done((connectionInfo)=>{
             this.setState({
                connectionInfo: info.toLocaleLowerCase()
             });
          });
    
          //检测网络变化事件
          NetInfo.addEventListener('change',(connectionInfo)=>{
             this.setState({
                connectionInfo: info.toLocaleLowerCase()
             })
          })
        }
    
        
        render() {
            let { connectionInfo } = this.state;
            return (
                <View style={styles.container}>
                    <Text style={styles.welcome}>
                        当前的网络状态:{connectionInfo !== "none"? '网络在线': '离线'}
                    </Text>
                    <Text style={styles.welcome}>
                        当前的网络连接类型:{connectionInfo}
                    </Text>
                    <Text style={styles.welcome}>
                        当前连接的网络是否需要计费:
                        {NetInfo.isConnectionExpensive===true?'需要':'不需要'}
                    </Text>
                </View>
            );
        } //isConnectionExpensive(仅Android端)
    }
    

    说明: NetInfo API为开发者提供了 isConnectionExpensive 函数用来判断当前网络连接是否付费的。如果当前连接是通过移动数据网络,或是通过基于移动数据网络所创建的wifi热点,都有可能被判定为计费的数据连接。目前这个函数只为Android平台提供。

    目前我的项目中只判断了wifi、移动数据连接、网络未连接几种状态。 有更好的交互欢迎探讨

    React Native 找不到NetInfo引用

    React Native >= 0.6版本中发现NetInfo引用不到,可参考下面这篇文章

    https://developer.aliyun.com/mirror/npm/package/@react-native-community/netinfo

    展开全文
  • 今天就分别介绍AppState(获取应用状态信息),NetInfo(获取网络信息)这两个模块。AppStateAppState可以获取当前APP是在前台还是在后台运行,并且当APP的运行状态发生改变的时会收到通知。AppState通常在处理推送...

    判断应用的状态是在前台还是后台,以及获取应用是否联网,是wifi或流量连接等这些基本应用信息在APP开发中是十分常见的功能。今天就分别介绍AppState(获取应用状态信息),NetInfo(获取网络信息)这两个模块。

    AppState

    AppState可以获取当前APP是在前台还是在后台运行,并且当APP的运行状态发生改变的时会收到通知。AppState通常在处理推送通知的时候用来决定内容和对应的行为。例如,判断应用在后台时通知栏显示并通过声音和振动提醒用户。当应用在前台时直接透传消息。

    AppState应用的状态

    App一般存在以下三种状态:

    • active - 应用正在前台运行
    • background - 应用正在后台运行。此时用户既可能在使用别的应用,也可能在桌面(Home界面)。
    • inactive - 此状态表示应用正在前后台的切换过程中,或是处在系统的多任务视图,又或是处在来电状态中。属于过渡状态,通常不会出现在React Native应用中,因此可暂不考虑。

    AppState属性方法

    • currentState:TypeCastExpression :标志当前状态类型

    • static addEventListener(type: string, handler: Function):添加监听应用状态(AppState)变化的方法。参数应填type:'change'以及处理方法。

    • static removeEventListener(type: string, handler: Function) :移除监听应用状态(AppState)变化的方法。参数同上。

    实例

    我们可以通过AppState.currentState要获取当前的状态,这个变量会一直保持更新。不过当App在启动的过程中,currentState可能为null,直到AppState从原生代码得到通知更新为止。

    import React, { Component } from 'react';
    import {
        AppRegistry,
        StyleSheet,
        Text,
        View,
        AppState, } from 'react-native';
    
    export default class AppStateDemo extends Component {
        constructor(props) {
            super(props);
            this.state = {
                currentAppState: AppState.currentState,
            };
        }
        componentDidMount() {
            AppState.addEventListener('change', this._handleAppStateChange);
        }
        componentWillUnmount() {
            AppState.removeEventListener('change', this._handleAppStateChange);
        }
        _handleAppStateChange = (appState) => {
            console.log('当前状态为:'+appState);
            if (this.state.currentAppState.match(/inactive|background/) && appState === 'active') {
                console.log('App has come to the foreground!')
            }
            this.setState({currentAppState: appState});
        }
        render() {
            return (
                <Text>Current state is: {this.state.currentAppState}</Text>
            );
        }
    }

    运行结果如下:

    该实例只会显示”Current state is: active”,这是因为应用只有在active状态下才能被用户看到。并且null状态只会在一开始的一瞬间出现。如果想看到当应用在后台时的状态,可以通过log日志查看。

    NetInfo

    NetInfo可以获知设备联网/离线的网络状态信息。由于iOS与Android本身的平台差异,导致其获取的网络状态信息有所不同。

    iOS

    在iOS平台上,NetInfo通过异步方式去检测设备是否联网还是连接移动数据网络。可能的网络状态值为:

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

    Android

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

    <uses-permission android:name="android.permission.INTERNET" />
    <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属性方法

    • isConnected: ObjectExpression:当前网络是否连接的属性,此属性为一个对象。

    • static addEventListener(eventName, handler):在网络状况/类型发生变化时调用此监听函数。回调的参数为上面列出的网络状况/类型。

    • static removeEventListener(eventName, handler) :移除网络状况/类型变化的监听函数。

    • static fetch() :返回一个promise,用于获取当前的网络状况/类型。

    • static isConnectionExpensive() :检测当前连接的网络是否需要计费,该方法只适合Android平台。例如当用户连接的是移动数据网络,那么会判断成该网络是需要计费的。具体判断代码如下:

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

    实例

    下面用实例演示一下NetInfo的实际使用。在写之前千万不要忘记Android项目中的权限配置,在android/app/src/AndroidManifest.xml中加入:

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

    下例演示了NetInfo基本用法,检测当前设备的网络连接状态,网络详细信息以及是否计费:

    import React, { Component } from 'react';
    import {
        AppRegistry,
        StyleSheet,
        Text,
        View,
        NetInfo, } from 'react-native';
    
    export default class NetInfoDemo extends Component {
        constructor(props){
            super(props);
            this.state = {
                isConnected: null,
                connectionInfo:null,
            };
        }
        componentDidMount() {
            NetInfo.isConnected.addEventListener(
                'change',
                this._handleConnectivityChange
            );
            //检测网络是否连接
            NetInfo.isConnected.fetch().done(
                (isConnected) => { this.setState({isConnected}); }
            );
            //检测网络连接信息
            NetInfo.fetch().done(
                (connectionInfo) => { this.setState({connectionInfo}); }
            );
        }
        componentWillUnmount() {
            NetInfo.isConnected.removeEventListener(
                'change',
                this._handleConnectivityChange
            );
        }
        _handleConnectivityChange(isConnected) {
            console.log((isConnected ? 'online' : 'offline'));
        }
        render() {
            return (
                <View >
                    <Text>
                        当前的网络状态:{this.state.isConnected ? '网络在线' : '离线'}
                    </Text>
                    <Text >
                        当前网络连接类型:{this.state.connectionInfo}
                    </Text>
                    <Text >
                        当前连接网络是否计费:{NetInfo.isConnectionExpensive === true ? '需要计费' : '不需要'}
                    </Text>
                </View>
            );
        }
    }
    

    结果如下:

    展开全文
  • RN中API之NetInfo--浅谈

    2019-07-24 23:40:39
    在使用RN技术开发APP时,其内置的NetInfo API就是为了解决这一问题的。下面简单的讲下NetInfo如何使用。  最新的API与以往的有些不同,具体如下: - `fetch`方法过时了,用`getConnection`替代 - `change`事件...
  • 网络状态NetInfo NetInfo库的作用是检测当前是否联网及获取联网方式及网络牌照等信息。 要使用NetInfo库,需要先在AndroidManifest.xml中配置权限: <uses-permission android:name="android.permission....
  • 在React Native 0.6版本中发现NetInfo引用不到,运行后报错,NetInfo is not an object 解决方法 ①:yarn命令添加 yarn add@react-native-community/netinfo ②:执行react-native link@react-native-community/...
  • 没图你说个xxNetInfo简介NetInfo 用来获取网络状态。提供的属性方法如下: - isConnected : 表示网络是否连接 - fetch(): 获取网络状态 - addEvent Li 沙特呢人(eventName,handler):添加事件监听。 - ...
  • NetInfo v8.7 Build 118.zip

    2020-03-12 16:37:24
    NetInfo 15 个应用程序合为一体,允许多任务这提供一批工具辨别网络信息的可配置,多线程的程序。 程序编制的一些网络功能有能力运行包括踪迹路线, NSlookup ,服务扫描,本地信息,时间同步装置, Whois ,finger...
  • ##网络连接状态NetInfo: 获取网络状态是异步的,使用了js的Promise机制 Android平台的网络连接类型状态如下: 1.NONE 设备没有网络连接 2.BLUETOOTH 蓝牙数据连接 3.DUMMY 虚拟数据连接 4.ETHERNET 以太网数据...
  • 一 、 android 端  首先配置权限  android:name="android.permission.ACCESS_NETWORK_STATE"/> NONE  设备没有网络连接 WIFI  无线网络连接 MOBILE  手机移动网络数据连接 ... //
  • RN NetInfo使用

    2019-07-13 17:10:32
    代码: class NetInfoView extends Component { getNetInfo() { //如果是andorid的程序,需要在xml添加获取网络请求权限 ... NetInfo.fetch().done((status) => { // console.log('Status:' + s...
  • 修复NETINFO错误的命令行 级别:高级 先决条件:终端/命令行,用户和组 介绍 今天,在进行例行维护时,我注意到我不再能够使用sudo。 而且尝试进行身份验证无效。 我的计算机一直抱怨我没有提供有效的管理员用户名。...
  • 这是一篇很好的简单叙述Leopard的核心的一个重大变化,它彻底放弃使用NetInfo数据库的方法来管理用户用户组和资源,而是采用更为好管理、直观明了的XML方式,在给出一个具体例子后,也给出了相应命令行的改变。...
  • 开发应用过程中,我们往往需要获取/监听手机的网络状态,而RN提供的NetInfo api随着sdk的升级往往会出现许多的问题。所以本文将介绍如何按需自行编写获取手机网络状态的原生代码。 对于网络相关的功能,往往涉及到...
  • RN iOS网络是否连接bug

    2017-11-13 14:00:47
    react native 是有判断网路是否连接这个接口的NetInfo。 可以通过这样来判断:isConnected=true 有网络,反之没有网络。 data = await NetInfo.isConnected.fetch().then((isConnected) => { console.log('...
  • Tsarfin NetInfo v6.4

    2020-03-12 16:37:21
    可用来获得以IP相接的各种网络信息,以相当直观的图形界面,并完全利用到Windows系统的点选功能,让它成为新手或是老手的最好帮手,其功能有:Local Info、Connections、Ping、Trace、Lookup、Finger、Whois、...
  • Android获取网络信息库 ...https://github.com/YaphetZhao/netinfo How to Use Gradle allprojects { repositories { ... maven { url 'https://jitpack.io' } } } dependencies { c...
1 2 3 4 5 ... 20
收藏数 1,294
精华内容 517
热门标签
关键字:

netinfo