AIR检测网络

    package com.juyou.util.net  
    {  
        import flash.events.StatusEvent;  
        import flash.net.URLRequest;  
          
        import air.net.URLMonitor;  
        /** 
         * 网络监听 
         *  
         */  
        public class NetChecker  
        {  
            private static var request:URLRequest = new URLRequest("http://www.baidu.com");  
            private static var monitor:URLMonitor;  
            /**检测间隔时间*/  
            public static var _interval:Number = 10000;  
            private static var available:Boolean = true;  
            private static var observerList:Vector.<INetObserver> = new Vector.<INetObserver>();  
            public function NetChecker()  
            {  
                  
            }  
            /** 
             * 注册观察者对象 
             * @param obj    观察者对象 
             */  
            public static function attach(obj:INetObserver):void  
            {  
                if(observerList.indexOf(obj) == -1)  
                {  
                    observerList.push(obj);  
                }  
            }  
              
            /** 
             * 删除观察者对象 
             * @param obj    观察者对象 
             */  
            public static function detach(obj:INetObserver):void{  
                var index:int = observerList.indexOf(obj);  
                if(index == -1)  
                    return;  
                observerList.splice(index,1);  
            }  
              
            /** 
             * 通知所有注册的观察者对象 
             */  
            private static function nodifyObservers():void{  
                for each(var obj:INetObserver in observerList)  
                {  
                    obj.updateNetAvailable(available);  
                }  
            }  
              
            /** 
             * 开始监听网络状况  
             *  
             */  
            public static function monitorNetwork():void  
            {  
                if(!monitor)  
                    monitor = new URLMonitor(request);  
                monitor.pollInterval = _interval;  
                monitor.addEventListener(StatusEvent.STATUS,onStatusHandler);  
                monitor.start();  
            }  
              
            /** 
             * 设置监听网络间隔  
             * @param val 
             *  
             */  
            public static function set interval(val:Number):void  
            {  
                if(_interval == val)return;  
                _interval = val;  
                if(monitor && monitor.running)  
                {  
                    monitor.stop();  
                    monitor.pollInterval = _interval;  
                    monitor.start();  
                }  
            }  
              
            public static function get interval():Number  
            {  
                return _interval;  
            }  
              
            /** 
             * 停止监听网络状态  
             *  
             */  
            public static function stopMonitor():void  
            {  
                if(monitor)  
                    monitor.stop();  
            }  
              
            /** 
             * 判断当前网络是否可用  
             * @return  
             *  
             */  
            public static function get networkAvailable():Boolean  
            {  
                return available;  
            }  
              
            private static function onStatusHandler(e:StatusEvent):void  
            {  
    //          trace( ">>onStatusEvent::evt.code=" + e );  
                if(e.level == "status")  
                {  
                    var flag:Boolean = false;  
                    if(monitor.available && !available)  
                    {  
                        trace("网络已连接");  
                        available = true;  
                        flag = true;  
                    }  
                    else if(!monitor.available && available)  
                    {  
                        available = false;  
                        trace("没有检测到网络");  
                        flag = true;  
                    }  
                      
                    if(flag)  
                    {  
                        nodifyObservers();  
                    }  
                }  
                      
            }  
              
        }  
    }  

    package  
    {  
        public interface INetObserver  
        {  
            function updateNetAvailable(ava:Boolean):void;  
        }  
    }  

 

posted @ 2014-11-04 10:51  skybdemq  阅读(258)  评论(0编辑  收藏  举报