個人的なプロジェクトでは、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