你能在android中解释requestRouteToHost()的功能吗?

prg*_*prg 3 routing android wifi 3g

在我的代码中我使用的requestRouteToHost() 方法:

这种路由是否意味着将WIFI改为3G,反之亦然?

我的代码无效......

public static boolean isHostAvailable(Context context, String urlString) throws UnknownHostException, MalformedURLException { 
     boolean ret = false; 
     int networkType = ConnectivityManager.TYPE_WIFI; 
     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if(cm != null){ 
             NetworkInfo nf = cm.getActiveNetworkInfo(); 
             if(nf != null){ 
                     networkType = nf.getType(); 
             } 
             URL url = new URL(urlString); 
             InetAddress  iAddress = InetAddress.getByName(url.getHost()); 
             ret = cm.requestRouteToHost(networkType, ipToInt(iAddress.getHostAddress())); 
     } 
     return ret; 
}

public static int ipToInt(String addr) {
     String[] addrArray = addr.split("\\.");

     int num = 0;
     for (int i=0;i<addrArray.length;i++) {
         int power = 3-i;

         num += ((Integer.parseInt(addrArray[i])%256 * Math.pow(256,power)));
     }
     return num;
 }
Run Code Online (Sandbox Code Playgroud)

谢谢

Avi*_*rry 28

我认为这是一个记录极差的方法,虽然上面的评论说"认为它是一个ping"可能是一个合理的解释,但我不认为这是正确的.它将int作为主机地址的事实表明它是一个比它更低级别的方法,而JavaDoc中的注释This method requires the caller to hold the permission CHANGE_NETWORK_STATE是另一条线索,这表明这会对设备的内部路由表进行更改.此链接提供了更好的解释:

requestRouteToHost()不在任何网络上建立连接,它只确保指定主机的任何流量将通过指定的网络类型(wifi或移动)路由.连接必须已存在于指定的网络上.

考虑到所需的许可,这种解释使得更有意义.它似乎也不适用于WiFi.因此,此方法似乎有用的是:您希望确保通过SPECIFIC接口建立与特定主机的连接,并且该接口不是WiFi.这对于长期,低流量,电池效率高的连接可能是有意义的,例如当您希望将套接字保持对服务器开放并等待服务器发送偶尔的消息时.移动数据接口比WiFi更有意义,因为您不需要一直保持WiFi无线电活动,并且移动网络无线电始终处于打开状态.顺便提一下,这完全是iPhone的服务器"推送"机制如何工作:它通过移动数据接口持续连接到Apple服务器,等待服务器说些什么.

因此,与(当前选择的)正确答案相反,我建议问答者问题的答案:Does this routing means changing the WIFI to 3G or vice versa??实际上,"是的,有点儿!" 如果该方法返回true,则确保调用者将在指示的接口上发生与该IP地址的连接.

谷歌:嘘你没有更好地记录你的一些API!