Actionscript 3 - 检查互联网连接

时间:2012-11-26 06:11:39

标签: actionscript-3 flash-cs6

我在我的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而不是AIR应用程序的html页面

干杯

3 个答案:

答案 0 :(得分:7)

(我的名声太低,不能直接评论田振麟的回答......)

我需要做一些改变才能让Tianzhen Lin的答案按预期工作:

  • 添加了:

    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设备上),都始终检测到连接状态的变化。

答案 1 :(得分: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
}

答案 2 :(得分:0)

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

但是你可以尝试自己动手,因为所有这个监听类都会“ping”网址并检查响应,所以你可以做类似的尝试从google.com等已知来源加载某些东西,如果它完成没有错误然后就可以了,否则你会收到错误。