2

個人的なプロジェクトでは、MMS のデバイス LAN IP が到達可能かどうかを確認する必要があります。提供された APN を持つ IP は既に見つかりました。ここで、requestRouteToHostメソッドを使用して、見つかったプロキシが有効かどうかを確認する必要があります。

このコードは、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 などでテスト済み.

編集: 例外をスローするデバイスでは、ルート IP の ping コマンドが機能します。

> 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

しかし、ルート要求は失敗しました:s

4

1 に答える 1

0

問題が解決しました。Wi-Fiが有効になっている間は、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.");
}
于 2013-01-24T14:40:03.793 に答える