2

Adobe Air で iPad のネットワーク ステータスを確認したいのですが、現在 Google.com に URLREQUEST を送信して確認しています。ネットワークの状態を監視し、接続があるかどうか、または接続が切断されているかどうかを知るための他の良い方法はありますか? 提案をありがとう。

4

1 に答える 1

6

ここで注意が必要なのは、いくつかの間隔で ping を実行していないことです。だから私たちは使用します

NativeApplication.nativeApplication.addEventListener(Event.NETWORK_CHANGE, onNetwork_ChangeHandler);

ネットステータスの変更が発生したときにトリガーされるため、パフォーマンスに関しても優れています。

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

イベントクラス

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

    }
}

使用法 :

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

netStatusMonitor.start();
于 2012-12-04T05:06:00.530 に答える