使用Adobe Air在iPad上检查网络状态的最简单方法

Bru*_*uce 2 air actionscript-3

我想用Adobe Air检查iPad上的网络状态,此时我正在通过向Google.com发送URLREQUEST进行检查.是否还有其他更好的方法来监控网络状态,并知道是否已断开连接或连接.谢谢你的任何建议.

Raj*_*han 6

这里棘手的部分我们没有ping一些间隔时间.所以我们用

NativeApplication.nativeApplication.addEventListener(Event.NETWORK_CHANGE, onNetwork_ChangeHandler);
Run Code Online (Sandbox Code Playgroud)

它会在改变净状态变化时触发,因此性能也很好.

因为Ping是非常昂贵的操作.所以在网络改变后调用start()URLMontior然后我们调用stop().

      package com.abc.net
    {
    import air.net.URLMonitor;
    import flash.desktop.NativeApplication;
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.events.IEventDispatcher;
    import flash.events.StatusEvent;
    import flash.net.URLRequest;

    [Event(name="networkStatusChanged", type="flash.events.Event")]
    public class NetStatusMonitor extends EventDispatcher
    {
        private var urlMonitor:URLMonitor;
        private var url:String;

        public function KBNetStatusMonitor(url:String = 'http://www.adobe.com')
        {
            super();
            this.url = url;
            NativeApplication.nativeApplication.addEventListener(Event.NETWORK_CHANGE, onNetwork_ChangeHandler);
        }

        protected function onNetwork_ChangeHandler(event:Event):void
        {
            start();
        }       

        public function start():void
        {
            urlMonitor = new URLMonitor(new URLRequest(url));
            urlMonitor.addEventListener(StatusEvent.STATUS, onNetStatus_ChangeHandler);

            if(!urlMonitor.running)
                urlMonitor.start();
        }

        public function stop():void
        {
            if(urlMonitor.running)
                urlMonitor.stop();
        }

        private function onNetStatus_ChangeHandler(event:StatusEvent):void
        {
            trace("event code " + event.code);
            trace("event level " + event.level);
            dispatchEvent(new NetStatusEvent(NetStatusEvent.NETWORK_STATUS_CHANGED,urlMonitor.available));
            stop();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

活动类

package com.abc.net
{
    import flash.events.Event;

    public class NetStatusEvent extends Event
    {
        public static const  NETWORK_STATUS_CHANGED:String = "networkStatusChanged";

        public var status:Boolean;

        public function NetStatusEvent(type:String, status:Boolean, bubbles:Boolean=false, cancelable:Boolean=false)
        {
            super(type, bubbles, cancelable);
            this.status = status;
        }

        override public function clone():Event
        {
            return new NetStatusEvent(type, status, bubbles,cancelable);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

var netStatusMonitor:NetStatusMonitor = new NetStatusMonitor();
    netStatusMonitor.addEventListener(NetStatusEvent.NETWORK_STATUS_CHANGED,function(event:NetStatusEvent):void {
           statusCallBack.call(null,event.status);
});

netStatusMonitor.start();
Run Code Online (Sandbox Code Playgroud)