2013-01-17 29 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."); 
} 
相關問題