2012-11-26 13 views
5

Sto usando questo codice nel mio file flashActionscript 3 - il controllo di una connessione ad internet

import air.net.URLMonitor; 
import flash.net.URLRequest; 
import flash.events.StatusEvent; 

var monitor:URLMonitor; 

function checkInternetConnection(e:Event = null):void 
{ 
var url:URLRequest = new URLRequest("http://www.google.com"); 
url.method = "HEAD"; 
monitor = new URLMonitor(url); 
monitor.pollInterval = 1000; 
// 
monitor.addEventListener(StatusEvent.STATUS, checkHTTP); 
// 
function checkHTTP(e:Event = null):void 
{ 
if (monitor.available) { 

     navigateToURL(new URLRequest("flickr.html"),"_top"); 

    } else { 

     gotoAndPlay(1); 

    } 
} 
monitor.start(); 
} 

Sto cercando di ottenere il flash per verificare la presenza di una connessione e passare a un'altra pagina se non si ripete.

Sembra non funzionare. Mi manca qualcosa?

Ho aggiunto anche il percorso della libreria a aircore.swc.

che deve essere così una pagina html con il flash piuttosto che un app AIR

Acclamazioni

risposta

0

L'air.net.URLMonitor è la classe disponibile AIR - così non funziona al di fuori del lettore AIR.

Ma si potrebbe provare a fare il proprio come tutta questa classe monitor non è "ping" l'url e controllare la risposta, in modo che si possa fare prova simile per caricare qualcosa dalla fonte conosciuta come google.com e se si completa wihtout errore quindi è OK altrimenti si otterrà l'errore.

+0

scusa, ti dispiace controllare questo collegamento http://stackoverflow.com/questions/39849033/flash-cs6-as3-check-internet-connection-not-working-at-all/39860240?noredirect=1# comment67291875_39860240 –

6

Vedo due problemi nel codice. Uno è che mentre si ha la logica di check internet connection, non c'è alcun codice che chiama la funzione, quindi la logica del reindirizzamento non verrebbe chiamata. Il secondo è che usare AIRcore.swc sarebbe una cattiva idea dato che hai iniettato una dipendenza che potrebbe non funzionare o violare la sandbox del browser.

Puoi provare l'approccio seguito che viene testata e non necessita di AIR SWC:

Fase 1, includono una nuova classe ConnectionChecker come segue:

package 
{ 
    import flash.events.*; 
    import flash.net.*; 

    [Event(name="error", type="flash.events.Event")] 
    [Event(name="success", type="flash.events.Event")] 
    public class ConnectionChecker extends EventDispatcher 
    { 
     public static const EVENT_SUCCESS:String = "success"; 
     public static const EVENT_ERROR:String = "error"; 

     // Though google.com might be an idea, it is generally a better practice 
     // to use a url with known content, such as http://foo.com/bar/mytext.txt 
     // By doing so, known content can also be verified. 

     // This would make the checking more reliable as the wireless hotspot sign-in 
     // page would negatively intefere the result. 
     private var _urlToCheck:String = "http://www.google.com"; 


     // empty string so it would always be postive 
     private var _contentToCheck:String = "";  

     public function ConnectionChecker() 
     { 
      super(); 
     } 

     public function check():void 
     { 
      var urlRequest:URLRequest = new URLRequest(_urlToCheck); 
      var loader:URLLoader = new URLLoader(); 
      loader.dataFormat = URLLoaderDataFormat.TEXT; 

      loader.addEventListener(Event.COMPLETE, loader_complete); 
      loader.addEventListener(IOErrorEvent.IO_ERROR, loader_error); 

      try 
      { 
       loader.load(urlRequest); 
      } 
      catch (e:Error) 
      { 
       dispatchErrorEvent(); 
      } 
     } 

     private function loader_complete(event:Event):void 
     { 
      var loader:URLLoader = URLLoader(event.target); 
      var textReceived:String = loader.data as String; 

      if (textReceived) 
      { 
       if (textReceived.indexOf(_contentToCheck)) 
       { 
        dispatchSuccessEvent(); 
       } 
       else 
       { 
        dispatchErrorEvent(); 
       } 
      } 
      else 
      { 
       dispatchErrorEvent(); 
      } 
     } 

     private function loader_error(event:IOErrorEvent):void 
     { 
      dispatchErrorEvent(); 
     } 


     private function dispatchSuccessEvent():void 
     { 
      dispatchEvent(new Event(EVENT_SUCCESS)); 
     } 

     private function dispatchErrorEvent():void 
     { 
      dispatchEvent(new Event(EVENT_ERROR)); 
     } 
    } 
} 

Fase 2, nella vostra applicazione principale o da nessuna parte la connessione internet deve essere controllato, utilizzare il seguente frammento:

var checker:ConnectionChecker = new ConnectionChecker(); 
checker.addEventListener(ConnectionChecker.EVENT_SUCCESS, checker_success); 
checker.addEventListener(ConnectionChecker.EVENT_ERROR, checker_error); 
checker.check(); 

private function checker_success(event:Event):void 
{ 
    // There is internet connection 
} 

private function checker_error(event:Event):void 
{ 
    // There is no internet connection 
} 
+0

ciao, ti dispiace controllare questo link: http://stackoverflow.com/questions/39849033/flash-cs6-as3-check-internet-connection-not-working-at-all –

+0

Ho provato il tuo codice con le regolazioni menzionato nella risposta di cui sopra, funziona solo su un dispositivo Android, c'è qualcosa che dovrei fare per farlo funzionare su un iOS? –

7

(la mia reputazione è troppo basso per commentare T La risposta di ianzhen Lin direttamente ...)

avevo bisogno di apportare alcune modifiche al fine di ottenere la risposta di Tianzhen Lin a funzionare come previsto:

  • Aggiunto:

    urlRequest.useCache = false; 
    urlRequest.cacheResponse = false; 
    

    Questa aggiunta era necessario perché anche quando la connessione è stata definitivamente persa, il controllo era ancora valido perché la cache veniva letta da.

  • Modificato:

    if(textReceived.indexOf(_contentToCheck)) 
    

    a:

    if(!(textReceived.indexOf(_contentToCheck) == -1)) 
    

    Questa modifica è stata necessaria perché mentre "" è stata sempre essendo trovato (una stringa vuota), veniva trovato corrispondenza dell'indice '0' che stava causando il fallimento della condizione originale if().

  • Aggiunto:

    urlRequest.idleTimeout = 10*1000; 
    

    Nel caso in cui il cavo di rete era fisicamente disconnesso dal router, la richiesta potrebbe richiedere molto tempo per time-out (Onestamente, mi sono stancato di aspettare dopo un . paio di minuti)

Dopo aver apportato le modifiche di cui sopra, ho trovato il codice di Tianzhen ha funzionato perfettamente: Non importa come sono andato su scollegando/ricollegando Wi-Fi (su entrambi i dispositivi iOS e Android) il cambiamento di stato della connessione è stato sempre rilevato.

+0

hy, il tuo codice funziona solo per dispositivi Android, l'ho provato su entrambi, posso ottenere un risultato solo se sono su un dispositivo Android, per iOS, è costantemente senza connessione a Internet, nessuna idea? –

Problemi correlati