2012-03-26 34 views
9

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

回答

13

尝试此在iOS检测移动与无线网络连接。这就需要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 2012-04-19 07:20:55

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;  
} 
+0

从理论上讲,在移动连接是稳定的,你能做到这一点,但考虑到即使3G网络是什么,但稳定(考虑去在桥下,或3G可能会降至EDGE的高层建筑之间),您必须不断下载文件以检查连接速度。不太实际。我的解决方法是完全放弃移动网络上的推送机制并转到轮询。不是很好,但作为稳定的3G连接对于推送数据来说非常快。 – AlBirdie 2012-03-27 06:13:28

0

尼斯...如果它的工作原理......说不上来,如果有一个解决一个直接的解决方案,但是,当你下载一个文件,你可以检查的速度,文件被下载,通过与加载的字节一起和总字节数的比率使用getTimer函数