2012-03-26 6 views
9

Ich muss feststellen, welchen Verbindungstyp ein Gerät verwendet. Unterscheidung zwischen WIFI und 3G scheint kein Problem auf iOS (mit der NetworkInfo ANE) und Android (mit der nativen NetworkInfo-Klasse) zu sein, aber ich habe keine Ahnung, wie man weiter zwischen einem schnellen (3G, 4G) und langsame (EDGE) Verbindung. Gibt es eine Möglichkeit, dies mit Adobe Air zu tun?Adobe Air - Erkennen, ob die Verbindung WIFI, 3G oder EDGE ist

Antwort

13

Try this for Mobile vs. Wifi auf iOS zu erkennen. Dies erfordert die native Adobe-Erweiterung „Network“

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

Das sieht vielversprechend aus! Vielen Dank dafür! Irgendwelche Ideen, wenn es etwas Ähnliches für Android-Geräte gibt? – AlBirdie

0

Ich weiß nicht, ob es eine Lösung eine direkte Lösung gibt, aber wenn Sie eine Datei herunterladen, können Sie die Geschwindigkeit, mit der die Datei heruntergeladen wird, mit GetTimer-Funktion in Verbindung mit geladenen Bytes und einem Verhältnis der gesamten Bytes.

Beispiel

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

In der Theorie, wo die mobile Verbindung stabil ist, könnten Sie das tun, aber da sogar 3G-Netze alles andere als stabil sind (in Betracht ziehen Unter einer Brücke oder zwischen hohen Gebäuden, wo 3G wahrscheinlich auf EDGE fallen kann) müssten Sie die Datei ständig herunterladen, um die Verbindungsgeschwindigkeit zu überprüfen. Nicht wirklich praktisch. Mein Workaround wäre, meinen Push-Mechanismus in Mobilfunknetzen komplett zu löschen und zu einem Polling zu wechseln. Nicht sehr nett, obwohl eine stabile 3G-Verbindung für Daten schnell genug ist. – AlBirdie

0

Nizza ... wenn es funktioniert ... Keine Ahnung, ob es eine Lösung, die eine direkte Lösung, aber wenn Sie eine Datei herunterladen können Sie die Geschwindigkeit überprüfen, an denen Datei wird heruntergeladen, durch Verwendung von getTimer-Funktion in Verbindung mit geladenen Bytes und einem Verhältnis der gesamten Bytes