【问题标题】:Adobe Air - Detect if connection is WIFI, 3G, or EDGEAdobe Air - 检测连接是 WIFI、3G 还是 EDGE
【发布时间】:2012-04-09 23:16:23
【问题描述】:

我需要确定设备正在使用哪种连接类型。 在 iOS(使用NetworkInfo ANE)和 Android(使用本机 NetworkInfo 类)上区分 WIFI 和 3G 似乎不是问题,但我不知道如何进一步区分快速(3G、4G)和慢速(EDGE)连接。 有没有办法用 Adob​​e Air 做到这一点?

【问题讨论】:

    标签: actionscript-3 apache-flex air flex4


    【解决方案1】:

    试试这个来检测 iOS 上的移动与 Wifi。这需要 Adob​​e 原生扩展“NetworkInfo”

    import com.adobe.nativeExtensions.Networkinfo.InterfaceAddress;
    import com.adobe.nativeExtensions.Networkinfo.NetworkInfo;
    import com.adobe.nativeExtensions.Networkinfo.NetworkInterface;
    
    var vNetworkInterfaces:Object; 
    if (flash.net.NetworkInfo.isSupported) 
    { 
      vNetworkInterfaces = getDefinitionByName('flash.net.NetworkInfo')['networkInfo']['findInterfaces'](); 
      mytrace("fall 1" );
    } 
    else 
    { 
      vNetworkInterfaces = getDefinitionByName('com.adobe.nativeExtensions.Networkinfo.NetworkInfo')['networkInfo']['findInterfaces']();
      mytrace("fall 2" );
    } 
    
    var hasWifi: Boolean = false;
    var hasMobile: Boolean = false;
    
    for each (var networkInterface:Object in vNetworkInterfaces) 
    { 
        if ( networkInterface.active && (networkInterface.name == "en0" || networkInterface.name == "en1") ) hasWifi = true;
        if ( networkInterface.active && (networkInterface.name == "pdp_ip0" || networkInterface.name == "pdp_ip1" || networkInterface.name == "pdp_ip2") ) hasMobile = true;
    
        mytrace( "active: " + networkInterface.active );
        mytrace( "displayName: " + networkInterface.displayName );
        mytrace( "name: " + networkInterface.name );
        mytrace( "hwAddress: " + networkInterface.hardwareAddress );
        mytrace( "--------------------" ); 
    } 
    
    mytrace( "has Mobile Internet: " + hasMobile );
    mytrace( "has Wifi Internet: " + hasWifi );
    

    【讨论】:

    • 看起来很有希望!非常感谢你!如果 Android 设备有类似的东西,有什么想法吗?
    【解决方案2】:

    我不知道是否有直接的解决方案,但是当您下载文件时,您可以通过使用 getTimer 函数以及加载的字节数和总字节数的比率来检查文件下载的速度。

    例子

    function init()
    {
        startTime = getTimer();
        loader = new Loader();
        loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onLoaderInit);
        loader.load("some-site.com/myasset.png");
    }
    
    function onLoaderInit(e:ProgressEvent)
    {
        $timePassed = (getTimer() - startTime) * 0.001; //it's in millisecounds convert to secounds
        $newBytes = loader.contentLoaderInfo.bytesLoaded - oldBytes; 
        var $rate:Number = $newBytes * $timePassed; //returns a value of bytes per sec.
        startTime = getTimer();
        oldBytes = loader.contentLoaderInfo.bytesLoaded;    
    }
    

    【讨论】:

    • 理论上,在移动连接稳定的情况下,您可以这样做,但考虑到即使 3G 网络也不稳定(考虑在桥下,或在 3G 可能下降到的高楼之间EDGE)您必须不断下载文件以检查您的连接速度。不太实用。我的解决方法是完全放弃我在移动网络上的推送机制并转向投票。不是很好,虽然稳定的 3G 连接对于推送数据来说非常快。
    【解决方案3】:

    很好...如果它有效...不知道是否有解决方案直接解决方案但是当您下载文件时,您可以检查文件下载的速度,方法是使用 getTimer 函数和加载的字节和占总字节数的比例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      相关资源
      最近更新 更多