2012-03-26 3 views
9

Мне нужно определить, какой тип подключения используется устройством. Отличия между WIFI и 3G, похоже, не проблема в iOS (с использованием NetworkInfo ANE) и Android (с использованием собственного класса NetworkInfo), но я не знаю, как отличить быстрый (3G, 4G) и медленное (EDGE) соединение. Есть ли способ сделать это с помощью Adobe Air?Adobe Air - обнаружение, если соединение WIFI, 3G или EDGE

ответ

13

Попробуйте для обнаружения Mobile по сравнению с Wi-Fi на 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

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), вам придется постоянно скачивать файл, чтобы проверить скорость вашего соединения. Не очень практично. Моим обходным решением было бы полностью отказаться от механизма push в мобильных сетях и перейти к опросу. Не очень приятно, хотя стабильное 3G-соединение достаточно быстро для выталкивания данных. – AlBirdie

0

Nice ... если он работает ... Не знаю, если есть решение прямое решение, но когда вы скачиваете файл, который вы можете проверить скорость, с которой файл загружается с использованием функции getTimer в сочетании с загруженными байтами и отношением общих байтов

Смежные вопросы