[转] [Flash/Flex] 在Flex4.5中检测网络连接类型

http://bbs.9ria.com/viewthread.php?tid=80613&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000


正如您可能知道的那样,Flex4.5是Flex的下一个版本,它对移动开发进行了优化。这意味着您可以在Flex框架下创建丰富的互联网应用,并将它们部署到移动的Android设备上,黑莓平板电脑上(在不久的将来还会部署到iOS上)。

移动RIAs的一个显著特点就是你可以将你的应用跟采用不同技术的服务器链接,如:PHP,Java和ColdFusion,.NET,....,事实上它跟你的桌面AIR应用是一样的。 你甚至可以通过使用DataService组件来实现RTMP通道上的实时数据链接。 试想想,实时股票更新,视频流,多设备间的协同工作...天空真的是无限的。不是这样吗?

我认为这一切听起来很不错,但在移动设备上工作时,人们往往忘记了一个重要的事情,那就是如果你不是在使用WiFi链接,你与服务器之间的数据链接会变得非常昂贵。然而,在Flex 4.5有一种方法来实际检查您是工作在移动数据链接(data contract)还是工作在WiFi连接上。

在应用程序中,您可以访问所有的设备接口,检查它们是否处于活动状态 。你唯一需要知道的是如何寻找某个接口。在下面的代码中,你可以看到我是如何检查“WiFi”和“mobile”接口的。在我找到的基础上,我只检查它们是否处于活动状态。请记住,有些人可能只通过移动的数据链接,但没有注册的话,那么仅找到“mobile”还是不够的。
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:s="library://ns.adobe.com/flex/spark" 
                title="Connection Test"
                creationComplete="initView()">

        <fx:Script>
                <![CDATA[
                        private function initView():void {
                                var interfaces:Vector.<NetworkInterface> = NetworkInfo.networkInfo.findInterfaces();

                                for(var i:uint = 0; i < interfaces.length; i++) {
                                        if(interfaces[i].name.toLowerCase() == "wifi" && interfaces[i].active) {
                                                lbl.text = "WiFi connection enabled";
                                                break;
                                        } else if(interfaces[i].name.toLowerCase() == "mobile" && interfaces[i].active) {
                                                lbl.text = "Mobile data connection enabled";
                                                break;
                                        }
                                }
                        }

                ]]>
        </fx:Script>

        <s:Label id="lbl" horizontalCenter="0" verticalCenter="0"/>
</s:View>


在这个例子中,我只是设置一个文本属性的标签,但你也可以在实际应用中使用它,比如:确定你的服务器数据的更新率。

在创建这样的应用中,有件事你不能忘记: 你必须在<applicationName>-app.xml文件中,在android这段设置适当的权限。 这部分应包含设置ACCESS_NETWORK_STATE和ACCESS_WIFI_STATE的权限,以便应用程序能正常工作。如果不设置,你将会从findInterfaces方法的返回中得到一个空的向量。
<android>
    <manifestAdditions><![CDATA[
        <manifest>
                <!-- See the Adobe AIR documentation for more information about setting Google Android permissions -->
                <uses-permission android:name="android.permission.INTERNET"/>
                <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
                <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
        </manifest>
]]></manifestAdditions>
  </android>

你可能感兴趣的:(android,网络应用,Flex,Flash,mobile)