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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值