2012-03-26 24 views
9

Bir cihazın hangi bağlantı türünü kullandığını belirlemem gerekiyor. WIFI ve 3G arasındaki fark, iOS'ta (NetworkInfo ANE'u kullanarak) ve Android'te (yerel NetworkInfo sınıfını kullanarak) bir sorun olarak görünmüyor ancak hızlı (3G, 4G) ve daha hızlı bir şekilde nasıl ayırt edileceğine dair hiçbir fikrim yok. Yavaş (EDGE) bağlantı. Adobe Air ile bunu yapmanın bir yolu var mı?Adobe Air - WIFI, 3G veya EDGE bağlantısının olup olmadığını tespit edin

cevap

13

iOS'ta Wifi vs Mobile tespit etmek için bu deneyin. Bu Adobe yerli uzantısı "NetworkInfo" gerektiren

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

Bu umut verici görünüyor! Bunun için çok teşekkür ederim! Android cihazlar için benzer bir şey varsa herhangi bir fikir? – AlBirdie

0

Doğrudan bir çözüm varsa, bir dosyayı indirirken yüklenen baytlarla ve toplam bayt oranıyla birlikte getTimer işlevini kullanarak dosyanın indirildiği hızı kontrol edebilirsiniz.

Örnek

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

Mobil bağlantının kararlı olduğu teoride, bunu yapabilirsiniz, ancak 3G ağlarının bile kararlı bir şey olduğunu varsayarak Bir köprünün altında veya 3G'nin büyük olasılıkla EDGE'ye düşebileceği yüksek binalar arasında), bağlantı hızınızı kontrol etmek için dosyayı sürekli olarak indirmeniz gerekir. Gerçekten pratik değil. Benim geçici çözümüm, itme mekanizmamı tamamen mobil ağlara bırakmak ve bir yoklamaya geçmek olacaktır. Çok da iyi değil, ancak istikrarlı bir 3G bağlantısı, veriler itilmek için çok hızlı. – AlBirdie

0

Güzel ... eğer çalışırsa ... Bilmiyorum orada bir çözüm doğrudan bir çözüm ama bir dosyayı indirirken yaparken hızını kontrol edebilir varsa hangi dosya yüklenen baytlarla birlikte getTimer işlevini kullanarak ve toplam bayt oranıyla birlikte indirilir.