Adobe Air - 检测连接是WIFI、3G还是EDGE

9
我需要确定设备使用的连接类型。在iOS(使用NetworkInfo ANE)和Android(使用本机NetworkInfo类)上区分WIFI和3G似乎不是问题,但我不知道如何进一步区分快速(3G、4G)和慢速(EDGE)连接。有没有一种方法可以在Adobe Air中实现这一点?
3个回答

13

尝试在iOS上使用此方法来检测移动网络与Wifi。这需要Adobe本机扩展程序"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 );

2
看起来很有前途!非常感谢您!有没有类似的东西适用于Android设备? - AlBirdie

0

我不知道是否有直接的解决方案,但当你下载文件时,可以通过使用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连接对于被推送的数据来说足够快,但这并不是很好。 - AlBirdie

0
不错...如果它能正常工作的话...不知道是否有一个直接的解决方案,但是当你下载文件时,你可以通过使用getTimer函数与已加载字节和总字节的比率来检查文件下载速度。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接