Potrzebuję określić, jakiego typu połączenia używa urządzenie. Rozróżnienie pomiędzy WIFI i 3G nie wydaje się być problemem na iOS (przy użyciu NetworkInfo ANE) i Android (przy użyciu rodzimej klasy NetworkInfo), ale nie mam pojęcia, jak dalej rozróżniać szybki (3G, 4G) i wolne połączenie (EDGE). Czy można to zrobić za pomocą Adobe Air?Adobe Air - Wykryj, czy połączenie jest WIFI, 3G lub EDGE
Odpowiedz
Spróbuj wykrywania Telefon komórkowy w porównaniu z WiFi iOS. To wymaga Adobe natywną rozszerzenie „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);
Nie wiem, czy istnieje rozwiązanie, ale kiedy pobierasz plik, możesz sprawdzić szybkość pobierania pliku, używając funkcji getTimer w połączeniu z załadowanymi bajtami i współczynnikiem całkowitej liczby bajtów.
Przykład
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;
}
Teoretycznie, jeśli połączenie mobilne jest stabilne, można to zrobić, ale biorąc pod uwagę, że nawet sieci 3G nie są stabilne (rozważmy pod mostem lub pomiędzy wysokimi budynkami, gdzie 3G może spaść do EDGE) musisz ciągle pobierać plik, by sprawdzić szybkość połączenia. Niezbyt praktyczne. Moim obejściem byłoby całkowite zrzucenie mechanizmu pchania w sieciach komórkowych i przejście do głosowania. Niezbyt przyjemne, ale jako stabilne połączenie 3G szybko można przesłać dane. – AlBirdie
Nicea ... czy to działa ... Nie wiem, czy istnieje rozwiązanie bezpośredni rozwiązanie, ale kiedy jesteś pobierania pliku można sprawdzić szybkość, z jaką plik jest pobierany za pomocą funkcji getTimer w połączeniu z załadowanymi bajtami i współczynnikiem całkowitej liczby bajtów
To wygląda obiecująco! Dziękuję ci bardzo za to! Wszelkie pomysły, jeśli jest coś podobnego na urządzenia z Androidem? – AlBirdie