首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flash CS6 - AS3 -检查互联网连接根本不工作

Flash CS6 - AS3 -检查互联网连接根本不工作
EN

Stack Overflow用户
提问于 2016-10-04 17:41:58
回答 3查看 867关注 0票数 1

我有一个在IOS和Android上工作的adobe air应用程序。我已经在互联网上到处搜索,看看如何检查设备是否连接到正常工作的连接。最符合逻辑的方法如下:

创建一个包含以下内容的ConnectionChecker类:

代码语言:javascript
复制
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 ) );
        }
    }
}

之后,每当我需要实际测试是否存在正常工作的连接时,我都会执行以下操作:

代码语言:javascript
复制
                    var checker:ConnectionChecker = new ConnectionChecker();
                    checker.addEventListener(ConnectionChecker.EVENT_SUCCESS, checker_success);
                    checker.addEventListener(ConnectionChecker.EVENT_ERROR, checker_error);
                    checker.check();

相应的函数是:

代码语言:javascript
复制
private function checker_success(event:Event):void
{
    trace("U have cnx");
    continueTheGame.visible = true;
    // There is internet connection
}

private function checker_error(event:Event):void
{
    trace("U dn't have cnx");
    continueTheGame.visible = false;
    // There is no internet connection
}

以上所有答案都是基于我在SO https://stackoverflow.com/a/13569775/5128351上找到的链接

现在的问题是,无论我是否有连接,我总是会得到没有连接的结果。我是不是遗漏了什么??

编辑:

我尝试将以下内容添加到xml文件中,但仍然得到相同的结果:

代码语言:javascript
复制
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>google.com</key>
        <dict>
            <!--Include to allow subdomains-->
            <key>NSIncludesSubdomains</key>
            <true/>
            <!--Include to allow HTTP requests-->
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <!--Include to specify minimum TLS version-->
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
        </dict>
    </dict>
</dict>
EN

回答 3

Stack Overflow用户

发布于 2016-10-05 03:25:47

关于 _contentToCheck String

//空字符串,因此始终为正

private var _contentToCheck:String = "";

我建议您检查加载HTML源代码中的实际“目标”文本。这样,如果它存在,你可以确定至少Google已经加载好了(设备有连接)。

代码语言:javascript
复制
// check string of HTML to confirm web load was successful
private var _contentToCheck:String = "<!doctype html>"; //beginning of Google's HTML text

关于 Check() function

如果您在您的loader_complete事件中使用如下逻辑会发生什么?

代码语言:javascript
复制
private function loader_complete(event:Event):void
{
    var loader:URLLoader = URLLoader( event.target );
    var textReceived:String = loader.data as String;

    if ( textReceived.length > 0 )
    {
        //index will be -1 if search text is not found (use IS NOT EQUAL to check this)
        if ( textReceived.indexOf( _contentToCheck ) != -1 )
        {
            dispatchSuccessEvent();
        }
        else
        {
            dispatchErrorEvent();
        }
    }
    else
    {
        dispatchErrorEvent();
    }
}

代码没有经过编译器测试,但逻辑应该适合您自己的测试。希望能有所帮助。

使用代码sample编辑

下面是我测试的两个代码(它可以正确地检测互联网连接的开/关)。

在function loader_complete中重新启用这些跟踪,以仔细检查任何内容。

(%1) FLA链接到此Connect_test_01.as (作为类的main )

代码语言:javascript
复制
package  
{
    import flash.display.MovieClip;
    import flash.events.*;

    import ConnectionChecker; 

    public class Connect_test_01 extends MovieClip 
    {
        public var checker:ConnectionChecker;

        public function Connect_test_01() 
        {
            checker = 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
            trace("-- YES - Net found.. You are connected");
            //continueTheGame.visible = true;
        }

        private function checker_error(event:Event):void
        {
            //# There is no internet connection
            trace("-- NO - Net not found... No connection");
            //continueTheGame.visible = false;
        }


    } //end Class

} //end Package

(2)这是上述代码导入中使用的ConnectionChecker.as

代码语言:javascript
复制
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 var urlRequest:URLRequest;
        public var loaderA:URLLoader;
        public var loaderB:URLLoader;

        public var textReceived:String;

        public static const EVENT_SUCCESS:String = "success";
        public static const EVENT_ERROR:String = "error";

        // URL to connect for testing
        private var _urlToCheck:String = "https://www.google.com";

        // check string within HTML content to confirm web load was successful
        private var _contentToCheck:String = "<!doctype html>"; //beginning of Google's HTML text 

        public function ConnectionChecker()
        { super(); }

        public function check():void
        {
            urlRequest = new URLRequest(_urlToCheck);
            loaderA = new URLLoader();
            loaderA.dataFormat = URLLoaderDataFormat.TEXT;

            loaderA.addEventListener(Event.COMPLETE, loader_complete);
            loaderA.addEventListener(IOErrorEvent.IO_ERROR, loader_error);

            try { loaderA.load(urlRequest); }
            catch ( e:Error ) { dispatchErrorEvent(); }
        }

        private function loader_complete(event:Event):void
        {
            loaderB = URLLoader( event.target );
            textReceived = String(loaderB.data); // as String;

            //# check contents of load (should be HTML source-code)
            //trace ("STRING CHECK : " + "\n" + textReceived + "\n");

            //# minus-1 means Not Found. Should be Zero since Search Text is beginning
            //trace("Index of String : " + textReceived.indexOf( _contentToCheck ) + "\n" );

            if ( textReceived.length > 0 )
            {
                //index will be -1 if search text is not found (use IS NOT EQUAL to check this)
                if ( textReceived.indexOf( _contentToCheck ) != -1 )
                { 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 ) ); }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2016-10-05 14:30:42

Adobe创建了一个URLMonitor类来处理这个问题。

http://help.adobe.com/en_US/air/reference/html/air/net/URLMonitor.html

http://www.infin8design.com/clients/stack/air.zip

票数 0
EN

Stack Overflow用户

发布于 2016-10-18 14:28:30

您是否已将现在所需的NSTransportSecurity XML添加到iOS应用程序描述符中?您需要指定要与之通信的所有域。

这放在iPhone节点内部。

代码语言:javascript
复制
<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>google.com</key>
    <dict>
      <key>NSIncludesSubdomains</key>
      <true/>
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
    </dict>

    <key>another domain.com</key>
    <dict>
      <key>NSIncludesSubdomains</key>
      <true/>
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
    </dict>
  </dict>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39849033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档