Actionscript 3 - 检查互联网连接
Posted
技术标签:
【中文标题】Actionscript 3 - 检查互联网连接【英文标题】:Actionscript 3 - checking for an internet connection 【发布时间】:2012-11-13 14:46:46 【问题描述】:我在我的 Flash 文件中使用此代码
import air.net.URLMonitor;
import flash.net.URLRequest;
import flash.events.StatusEvent;
var monitor:URLMonitor;
function checkInternetConnection(e:Event = null):void
var url:URLRequest = new URLRequest("http://www.google.com");
url.method = "HEAD";
monitor = new URLMonitor(url);
monitor.pollInterval = 1000;
//
monitor.addEventListener(StatusEvent.STATUS, checkHTTP);
//
function checkHTTP(e:Event = null):void
if (monitor.available)
navigateToURL(new URLRequest("flickr.html"),"_top");
else
gotoAndPlay(1);
monitor.start();
我正在尝试让闪光灯检查连接并导航到另一个页面,如果没有,它将重播。
它似乎没有工作。 我错过了什么吗?
我也将库路径添加到 aircore.swc。
它应该是一个带有 flash 的 html 页面,而不是一个 AIR 应用程序
干杯
【问题讨论】:
【参考方案1】:(我的声望太低,无法直接评论林天真的回答……)
为了让林天真的答案按预期工作,我需要进行一些更改:
添加:
urlRequest.useCache = false;
urlRequest.cacheResponse = false;
之所以需要此添加,是因为即使连接肯定丢失,检查仍然成功,因为正在读取缓存。
改变:
if( textReceived.indexOf( _contentToCheck ) )
到:
if( !(textReceived.indexOf( _contentToCheck ) == -1) )
之所以需要此更改,是因为虽然总是找到“”(一个空字符串),但它是在索引“0”处找到的,这导致原始 if() 条件总是失败。
添加:
urlRequest.idleTimeout = 10*1000;
在网络电缆与路由器物理断开连接的情况下,请求可能需要很长时间才能超时(老实说,几分钟后我已经厌倦了等待。)
进行上述修改后,我发现天真的代码运行良好:无论我如何断开/重新连接 Wi-Fi(在 ios 和 android 设备上),始终检测到连接状态的变化。
【讨论】:
hy,你的代码只适用于安卓设备,我在两者上都测试过,如果我在安卓设备上,我只能得到结果,对于 iOS,它总是说没有互联网连接,有什么想法吗?【参考方案2】:我在您的代码中发现了两个问题。一是虽然你有check internet connection的逻辑,但没有任何代码调用该函数,因此不会调用重定向逻辑。其次,使用 AIRcore.swc 不是一个好主意,因为您注入的依赖项可能不适用于或违反浏览器沙箱。
您可以尝试以下经过测试且不需要 AIR 的 SWC 的方法:
第 1 步,包含一个新类 ConnectionChecker
,如下所示:
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 ) );
第 2 步,在您的主应用程序或应检查互联网连接的任何地方,使用以下 sn-p:
var checker:ConnectionChecker = 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
private function checker_error(event:Event):void
// There is no internet connection
【讨论】:
你好,你介意检查这个链接吗:***.com/questions/39849033/… 我在上面的答案中提到的调整尝试了你的代码,它只适用于安卓设备,我应该做些什么让它在 iOS 上运行?【参考方案3】:air.net.URLMonitor 是 AIR 可用类 - 因此在 AIR 播放器之外无法工作。
但是你可以尝试自己做,因为这个监视器类所做的就是“ping”url并检查响应,所以你可以做类似的尝试从google.com等已知来源加载一些东西,如果它在没有错误的情况下完成那么就OK了,否则会报错。
【讨论】:
对不起,你介意检查这个链接吗***.com/questions/39849033/…以上是关于Actionscript 3 - 检查互联网连接的主要内容,如果未能解决你的问题,请参考以下文章