做一个应用要支持这些网络 : wifi, 联通电信移动的3G, 移动的gprs(包括cmwap和cmnet接入点)。
是不是实现逻辑是这样的 : 先判断当前是否是cmwap接入点,如果是的话设置代理访问,否则其他网络全部都直接访问。请教高手有做个类似的么,这么连接有无问题?

解决方案 »

  1.   

    public String getIpAddress(){
         String ipAddress = "";
         try{
         ipAddress = wifiIpAddress();
         if(ipAddress!=null&&ipAddress.trim().length()>0){
         }else{
         ipAddress = this.GPRSIpAddress();
         }
         }catch(Exception ex){
        
         }
         return ipAddress;//有IP返回就联网
        }
        private String wifiIpAddress(){
         String ip = "";
         //获取wifi服务
            WifiManager wifiManager = (WifiManager)(context).getSystemService(Context.WIFI_SERVICE);
            //判断wifi是否开启
            if (wifiManager.isWifiEnabled()) {
             //wifiManager.setWifiEnabled(true);  
             WifiInfo wifiInfo = wifiManager.getConnectionInfo();     
                int ipAddress = wifiInfo.getIpAddress(); 
                ip = intToIp(ipAddress);
            }
            return ip;
        }
        private String intToIp(int i) {
            return (i & 0xFF ) + "." +     
          ((i >> 8 ) & 0xFF) + "." +     
          ((i >> 16 ) & 0xFF) + "." +     
          ( i >> 24 & 0xFF) ;
        }
        
        private String GPRSIpAddress(){
            try{
                for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();){
                   NetworkInterface intf = en.nextElement();
                   for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();){
                       InetAddress inetAddress = enumIpAddr.nextElement();
                       if (!inetAddress.isLoopbackAddress()){
                           return inetAddress.getHostAddress().toString();
                       }
                   }
               }
            }catch (SocketException ex){
                Log.d("GPRSIpAddress IpAddress", ex.toString());
            }
            return "";
        }另外配上
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
    这三个权限
      

  2.   

    danielinbiti,
    你这段代码只处理了gprs和wifi, 那么3G呢?
      

  3.   

    danielinbiti, 你的代码逻辑只是判断了wifi和gprs, gprs那块是否已经包含了3g了。
    如果我要区分wifi, gprs, 联通的3G, 移动的3G和 电信的3G, 能做到么?
      

  4.   

    这几种网络包括3G网络
    至于你说要区分开来,这没试过,获取了IP后,要区分是哪个运营商的应该不是难题。你的情况,你最好拿真机测一下网络,能够所有异常都考虑到还是要靠实践检验的。