2012-03-26 23 views
9

Devo determinare quale tipo di connessione sta utilizzando un dispositivo. La distinzione tra WIFI e 3G non sembra essere un problema su iOS (usando lo NetworkInfo ANE) e Android (usando la classe nativa di NetworkInfo) ma non ho idea di come distinguere ulteriormente tra un veloce (3G, 4G) e connessione lenta (EDGE). C'è un modo per farlo con Adobe Air?Adobe Air - Rileva se la connessione è WIFI, 3G o EDGE

risposta

13

Prova questo per la rilevazione mobile vs. Wifi su iOS. Ciò richiede l'estensione nativa di 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

Sembra promettente! Grazie mille per quello! Qualche idea se c'è qualcosa di simile per i dispositivi Android? – AlBirdie

0

Non so se esiste una soluzione diretta, ma quando si scarica un file è possibile controllare la velocità di download del file, utilizzando la funzione getTimer in combinazione con i byte caricati e un rapporto tra byte totali.

Esempio

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 teoria, dove la connessione mobile è stabile, è possibile farlo, ma dato che anche le reti 3G sono tutt'altro che stabili (prendere in considerazione l'andare sotto un ponte o tra edifici alti in cui è probabile che 3G possa passare a EDGE), devi scaricare costantemente il file per verificare la velocità della tua connessione. Non molto pratico. La mia soluzione alternativa sarebbe quella di abbandonare completamente il mio meccanismo di push sulle reti mobili e passare a un sondaggio. Non molto bello, anche se una connessione 3G stabile è molto veloce per i dati che vengono spinti. – AlBirdie

0

Nizza ... se funziona ... so se c'è una soluzione una soluzione diretta, ma quando si sta scaricando un file si potrebbe verificare la velocità con cui il file viene scaricato, utilizzando la funzione getTimer insieme ai byte caricati e un rapporto totale byte