2011-08-03 9 views
3

私のコードではrequestRouteToHost()メソッドを使用しています:アンドロイドで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; 
} 

おかげ

答えて

0
3Gまたはその逆にWIFIを変更しません requestRouteToHost()

方法を動作していません!

Official Documentation

public boolean requestRouteToHost (int networkType, int hostAddress) 

ネットワークルートが指定されたネットワークインターフェースを介して指定されたホストにトラフィックを配信するために存在することを確認してください。すでに存在するルートを追加しようとする試みは無視されますが、成功したものとして扱われます。

  • パラメータ

    networkTypeネットワークの種類が指定されたホストへのトラフィック上

    hostAddress経路が所望されているホストのIPアドレスをルーティングする

  • 返品

    true on successfalse on failure

+0

ありがとう..私はホストアドレスとして特定のウェブサイトのIPアドレスを与えている場合、私はこれをルーティングすることができますか? – prg

+0

ウェブサイトへのルートがあるかどうかを確認できます(ブール値) –

+0

@SherifelKhatib「ウェブサイトへのルート」とはどういう意味ですか? **ウェブサイトへのルート**とは何ですか? –

26

私は、これは非常に悪い文書化の方法だと思い、そして「それピング考える」と言って上記のコメントは、合理的な解釈かもしれませんが、私はそれが正しいだとは思いません。それがホストアドレスとしてintを取るという事実は、それがそれよりもはるかに低レベルの方法であることを示唆しており、JavaDoc This method requires the caller to hold the permission CHANGE_NETWORK_STATEのコメントは、これがデバイスの内部ルーティングテーブルを変更することを示唆する別の手がかりです。 This linkはより良い説明を提供:

requestRouteToHost()任意のネットワーク上で接続を確立しませんが、それ だけで指定したホストのトラフィックが指定されたネットワークの種類(WiFiまたはモバイル)を介して をルーティングされることを保証します。接続は指定されたネットワーク上にすでに が存在している必要があります。

この説明は、必要な許可を考慮して、より意味があります。それはまた、WiFiで動作しないように見えます。特定のホストへの接続が特定のインターフェイス経由で行われ、そのインターフェイスがWiFiでないことを確認したいとします。これは、サーバーにソケットを開いたままにし、サーバーが時折メッセージを送信するのを待つときなど、長期間の通信量の少ないバッテリ効率の良い接続には意味をなさけるかもしれません。モバイルデータインターフェイスはWiFiよりも理にかなっています.WiFiラジオを常にアクティブに保つ必要はなく、モバイルネットワークラジオは常にオンになっているからです。ちなみに、これはiPhoneのサーバーの「プッシュ」メカニズムがどのように機能するのかを正確に示しています.Appleサーバーへのソケットをモバイルデータインターフェイス上に常時接続して、サーバーが何かを言うのを待っています。

(現在選択されている)正解とは対照的に、私は質問者の質問への回答:Does this routing means changing the WIFI to 3G or vice versa??は実際には "はい、まあまあです!"このメソッドがtrueを返すと、呼び出し元は、指定されたインターフェイス上でそのIPアドレスへの接続が行われることが保証されます。

Googleに:あなたのAPIのいくつかをより良く文書化してくれなかったためにあなたにブー!

+0

これは正しい答えです、それは受け入れられた1つのIMOでなければなりません。 'requestRouteToHost()'を使うメソッドを実装し、あなたの無線ネットワークから(モデムケーブルをルータに取り出したように)インターネットをオフにすると、 'requestRouteToHost()'は 'true'を返すようになりますインターネット接続はしていませんが、ワイヤレスがオンです(ワイヤレスネットワーク内でのみ接続でき、外部には接続できません) – dazito

関連する問題