2013-01-17 28 views
2

对于个人项目,我必须检查MMS的设备LAN IP是否可到达。 我已经找到了提供APN的IP。现在我需要使用requestRouteToHost方法来检查发现的代理是否有效。requestRouteToHost在4.0.3和4.0.4下的问题,但不是其他的

该代码完全适用于运行Android 2.3到4.0以及从4.1到更高版本的设备。 但它在4.0.3和4.0.4下引发了一个错误。我已经在多个设备上进行了测试,这不是设备问题,而是第一个版本。

if (!connMgr.requestRouteToHost(2, inetAddr)) { 
    Log.e(TAG, "unable to request route to host"); 
    throw new IOException("Cannot establish route to proxy " + inetAddr); 
} else { 
    Log.e(TAG, "route to host requested"); 
} 

第一个条件总是如此,这是一个真正的问题。

上面的代码被包含到AsynTask我这样制成:

private class AsyncRoute extends AsyncTask<String, Void, Void> 
{ 
    @Override 
    protected Void doInBackground(String... proxyAddr) 
    { 
     try 
     { 
      ensureRouteToHost(proxyAddr[0]); 
      Log.e(TAG, "OK ACK"); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
     mInetAck = true; 
     return null; 
    } 
} 

InetAddress是否发现是-938825536这相当于192.168.010.200

要启动此的AsyncTask,我使用下面的代码:

new AsyncRoute().execute(MMSProxy); 
while (!mInetAck); 

基本上,它做一对夫妇的请求之前等待确认。

那么,有人知道是否有一个技巧绕过这个问题?我的意思是有一种方法可以做与connMgr.requestRouteToHost(2, inetAddr)相同的功能,可以在任何设备上使用。

谢谢。

PS:测试在Desire S的2.3,Desire S的4.0.3,的Xperia lt30p 4.0.4,歌Nexus S 4.0.3,等等。

编辑:在那抛出异常,ping命令上的设备路由IP的工作原理:

> adb shell ping 192.168.10.200 
PING 192.168.10.200 (192.168.10.200) 56(84) bytes of data. 
64 bytes from 192.168.10.200: icmp_seq=1 ttl=251 time=4023 ms 
64 bytes from 192.168.10.200: icmp_seq=5 ttl=251 time=81.3 ms 

但路线请求失败:■

回答

0

问题解决了。 无线网络启用时无法找到IP路由。最简单的方法是禁用wifi,做你的东西,然后启用wifi。

这里是我使用的代码:

// Disable wifi if it's active 
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); 
if (wifiManager.isWifiEnabled()) 
{ 
     mWasWifiActive = true; 
     wifiManager.setWifiEnabled(false); 
     Log.e(TAG, "Wifi was enabled, now Off."); 
} 

// Do stuff here 

// Re-enable wifi if it was active before routing 
if (mWasWifiActive) 
{ 
     WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); 
     wifiManager.setWifiEnabled(true); 
     Log.e(TAG, "Wifi is back online."); 
} 
相关问题