Actionscript 3 - 检查互联网连接

Posted

技术标签:

【中文标题】Actionscript 3 - 检查互联网连接【英文标题】:Actionscript 3 - checking for an internet connection 【发布时间】:2012-11-13 14:46:46 【问题描述】:

我在我的 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。

它应该是一个带有 flash 的 html 页面,而不是一个 AIR 应用程序

干杯

【问题讨论】:

【参考方案1】:

(我的声望太低,无法直接评论林天真的回答……)

为了让林天真的答案按预期工作,我需要进行一些更改:

添加:

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

之所以需要此添加,是因为即使连接肯定丢失,检查仍然成功,因为正在读取缓存。

改变:

if( textReceived.indexOf( _contentToCheck ) )

到:

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

之所以需要此更改,是因为虽然总是找到“”(一个空字符串),但它是在索引“0”处找到的,这导致原始 if() 条件总是失败。

添加:

urlRequest.idleTimeout = 10*1000;

在网络电缆与路由器物理断开连接的情况下,请求可能需要很长时间才能超时(老实说,几分钟后我已经厌倦了等待。)

进行上述修改后,我发现天真的代码运行良好:无论我如何断开/重新连接 Wi-Fi(在 iosandroid 设备上),始终检测到连接状态的变化。

【讨论】:

hy,你的代码只适用于安卓设备,我在两者上都测试过,如果我在安卓设备上,我只能得到结果,对于 iOS,它总是说没有互联网连接,有什么想法吗?【参考方案2】:

我在您的代码中发现了两个问题。一是虽然你有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 步,在您的主应用程序或应检查互联网连接的任何地方,使用以下 sn-p:

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

【讨论】:

你好,你介意检查这个链接吗:***.com/questions/39849033/… 我在上面的答案中提到的调整尝试了你的代码,它只适用于安卓设备,我应该做些什么让它在 iOS 上运行?【参考方案3】:

air.net.URLMonitor 是 AIR 可用类 - 因此在 AIR 播放器之外无法工作。

但是你可以尝试自己做,因为这个监视器类所做的就是“ping”url并检查响应,所以你可以做类似的尝试从google.com等已知来源加载一些东西,如果它在没有错误的情况下完成那么就OK了,否则会报错。

【讨论】:

对不起,你介意检查这个链接吗***.com/questions/39849033/…

以上是关于Actionscript 3 - 检查互联网连接的主要内容,如果未能解决你的问题,请参考以下文章

ActionScript 3 电子邮件检查

ActionScript 3 检查是否存在Class Definiton

ActionScript 3 检查XML属性是否存在

ActionScript 3 检查项目是否已存在于数组中

ActionScript 3 AS3检查Mac OS

ActionScript 3 检查DisplayObjects的HitTest / Collision检测