2012-11-26 7 views
5

Tôi đang sử dụng mã này trong tập tin flash của tôiActionscript 3 - kiểm tra các kết nối 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(); 
} 

tôi đang cố gắng để có được đèn flash để kiểm tra kết nối và điều hướng đến một trang khác nếu không nó sẽ phát lại.

Dường như nó không hoạt động. Tôi có thiếu gì không?

Tôi cũng thêm đường dẫn thư viện vào aircore.swc.

của nó có nghĩa là một trang html với đèn flash chứ không phải là một ứng dụng AIR

Cheers

Trả lời

0

Các air.net.URLMonitor là AIR sẵn lớp - như vậy sẽ không làm việc bên ngoài của máy nghe nhạc AIR. Tuy nhiên, bạn có thể cố gắng làm của riêng bạn vì tất cả các lớp màn hình này đều "ping" url và kiểm tra phản hồi, vì vậy bạn có thể làm tương tự như cố gắng tải một thứ gì đó từ nguồn đã biết như google.com và nếu nó hoàn thành wihtout sau đó nó là OK nếu không bạn sẽ nhận được lỗi.

+0

xin lỗi, bạn có nhớ kiểm tra liên kết này không, vui lòng http://stackoverflow.com/questions/39849033/flash-cs6-as3-check-internet-connection-not-working-at-all/39860240?noredirect=1# comment67291875_39860240 –

6

Tôi thấy hai vấn đề trong mã của bạn. Một là trong khi bạn có logic để check internet connection, không có bất kỳ mã nào gọi hàm, do đó logic của chuyển hướng sẽ không được gọi. Thứ hai là sử dụng AIRcore.swc sẽ là một ý tưởng tồi khi bạn đã tiêm một phụ thuộc có thể không hoạt động hoặc vi phạm sandbox trình duyệt.

Bạn có thể thử các phương pháp sau đây được thử nghiệm và không đòi hỏi của AIR SWC:

Bước 1, bao gồm một lớp mới ConnectionChecker như sau:

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

Bước 2, trong ứng dụng chính của bạn hoặc bất cứ nơi nào bạn nên kiểm tra kết nối internet đó, sử dụng đoạn mã sau:

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

Xin chào, bạn có nhớ kiểm tra liên kết này: http://stackoverflow.com/questions/39849033/flash-cs6-as3-check-internet-connection-not-working-at-all –

+0

Tôi đã thử mã của bạn với các điều chỉnh được đề cập trong câu trả lời ở trên, nó chỉ hoạt động trên một thiết bị Android, có bất cứ điều gì tôi nên làm gì để làm cho nó hoạt động trên một iOS? –

7

(Danh tiếng của tôi quá thấp để nhận xét về T ianzhen Lin của câu trả lời trực tiếp ...)

tôi cần phải thực hiện một vài thay đổi để có được câu trả lời Tianzhen Lin để làm việc như mong đợi:

  • Added:

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

    Ngoài này được yêu cầu bởi vì ngay cả khi kết nối đã bị mất hoàn toàn, kiểm tra vẫn thành công vì bộ nhớ cache đã được đọc từ đó.

  • Changed:

    if(textReceived.indexOf(_contentToCheck)) 
    

    tới:

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

    Sự thay đổi này đã được yêu cầu bởi vì trong khi "" (một chuỗi rỗng) đã luôn luôn được tìm thấy, nó đã được tìm thấy tại chỉ số '0' đã gây ra điều kiện if() ban đầu luôn thất bại.

  • Added:

    urlRequest.idleTimeout = 10*1000; 
    

    Trong trường hợp cáp mạng đã được thể chất bị ngắt kết nối từ router, yêu cầu có thể mất một thời gian rất dài để time-out (Thành thực mà nói, tôi đã mệt mỏi vì chờ đợi sau một . vài phút)

Sau khi thực hiện những thay đổi trên, tôi tìm thấy mã Tianzhen của làm việc một cách hoàn hảo: Không có vấn đề làm thế nào tôi đã đi về ngắt kết nối/kết nối lại Wi-Fi (trên cả iOS và các thiết bị Android) sự thay đổi trong tình trạng kết nối luôn được phát hiện.

+0

hy, mã của bạn chỉ hoạt động cho các thiết bị Android, tôi đã thử nghiệm trên cả hai, tôi chỉ có thể nhận được kết quả nếu tôi đang sử dụng thiết bị Android, cho iOS, liên tục nói không có kết nối internet, bất kỳ ý tưởng nào? –