2012-11-26 54 views
5

我使用這個代碼的ActionScript 3 - 檢查我的Flash文件的互聯網連接

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(); 
} 

我試圖讓閃光燈來檢查連接並導航到另一個頁面,如果不是將重播。

它似乎沒有工作。 我錯過了什麼?

我也添加了庫路徑aircore.swc也。

它的意思是用閃光​​燈的HTML頁面,而不是AIR應用程序

乾杯

回答

0

的air.net.URLMonitor是AIR提供一流的 - 所以不會在AIR球員之外工作。

但你可以嘗試做你自己的,因爲所有這個監視器類都是「ping」url並檢查響應,所以你可以做類似的嘗試加載來自已知源的東西,如google.com,如果它完成wihtout錯誤,那麼它是確定的,否則你會得到錯誤。

+0

對不起,你介意檢查這個鏈接,請http://stackoverflow.com/questions/39849033/flash-cs6-as3-check-internet-connection-not-working-at-all/39860240?noredirect=1#評論67291875_39860240 –

6

我在代碼中看到兩個問題。一個是,雖然你有邏輯check internet connection,沒有任何代碼調用該函數,因此重定向的邏輯將不會被調用。其次,使用AIRcore.swc將是一個壞主意,因爲您已經注入了一個可能不適用於或違反瀏覽器沙箱的依賴項。

你可以試試下面的辦法,經過測試,無需AIR的SWC:

步驟1,包括一個新的類ConnectionChecker如下:

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)); 
     } 
    } 
} 

第2步,在主應用程序或任何地方互聯網連接應進行檢查,使用下面的代碼片段:

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

你好,你介意檢查這個鏈接:http://stackoverflow.com/questions/39849033/flash-cs6-as3-check-internet-connection-not-working-at-all –

+0

我試着你的代碼與調整在上面的答案中提到,它只適用於Android設備,有什麼我應該做的,使其在iOS上工作? –

7

(我的信譽太低,對T發表評論ianzhen林的答案直接...)

我需要做才能得到田鎮林的回答參加工作沒變化預期:

  • 補充:

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

    這除了是必需的,因爲即使連接肯定丟失,檢查仍然成功,因爲緩存正在被讀取。

  • 更改:

    if(textReceived.indexOf(_contentToCheck)) 
    

    到:

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

    被要求的這種變化,因爲,而 「」(空字符串)總是被發現,它被在索引 '0' 中發現這導致原始if()條件總是失敗。

  • 補充:

    urlRequest.idleTimeout = 10*1000; 
    

    在網線是從路由器的物理連接斷開的情況下,請求可能需要花費很長的時間超時(老實說,我厭倦了之後等待。兩分鐘)

作出上述改變後,我發現天真的代碼非常完美:無論我如何去有關斷開/重新連接的Wi-Fi(在iOS和Android設備)的連接狀態的改變總是被發現。

+0

hy,你的代碼只適用於android設備,我測試過它,我只能得到一個結果,如果我在android設備上,對於iOS,它經常說沒有互聯網連接,任何想法? –