2009-11-12 14 views
57

コードで現在実行中のAndroid EmulatorのIPアドレスを取得したいと考えています。 どのように達成できますか?このようAndroidエミュレータのIPアドレスを取得する方法は?

+1

おそらく関連[ここ](http://stackoverflow.com/questions/7447221/how-to-connect-to-avd)と[here](http://stackoverflow.com/questions/13217796/is- android-avds-ファイアウォール - とにかくもっと制限されたリアルアンドアンドロイドファイアウォール)。 – hhh

+0

@hhh 2番目のリンクが壊れています。 :) –

+1

@MuhamedHuseinbašić私はこのスレッドが2番目のスレッドで問題を解決したので、単純なものにするために削除することにしました。 – hhh

答えて

119

あなたのアプリ内からは、単に「localhost」または127.0.0.1としてエミュレータを参照することができます。

Webトラフィックは開発マシンを経由してルーティングされるため、エミュレータの外部IPは、プロバイダーによってそのマシンに割り当てられたIPです。開発マシンは、あなたのデバイスから常に10.0.2.2に到達することができます。

エミュレータのIPについてのみ質問していたので、何をしようとしていますか?

+6

私はあなたにこれを100回アップしたいと思う。私はあなたのポストを読むまで私のアプリが実行していた別のローカルサーバーとどのように話すことができるかを理解できませんでした。ありがとう! – Spike

+0

10.0.2.2からどのように開発マシンにアクセスできますか?私はpingを試みたが、何もしなかった、pic [ここ](http://i.stack.imgur.com/Yjv7W.jpg)。右のIfconfig -appと左側の端末エミュレータは、dev-machineをpingしようとしています。 localhostの何かを見ることができない、簡単なテスト? – hhh

+0

@hhh JuiceSSHを試すことができます:https://play.google.com/store/apps/details?id=com.sonelli.juicessh上記のIPアドレスまたはホストの実際のIPアドレスからホストにアクセスできます。両方の変種が私のために働く。 –

25

NetworkInterface

public String getLocalIpAddress() { 
    try { 
     for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
      NetworkInterface intf = en.nextElement(); 
      for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { 
       InetAddress inetAddress = enumIpAddr.nextElement(); 
       if (!inetAddress.isLoopbackAddress()) { 
        return inetAddress.getHostAddress().toString(); 
       } 
      } 
     } 
    } catch (SocketException ex) { 
     Log.e(LOG_TAG, ex.toString()); 
    } 
    return null; 
} 

は、詳細はドキュメントを確認してください。

+4

そして、 'android.permission.INTERNET'の許可を忘れないでください。 –

+2

これはIP6アドレスをどのように取得するのですか? –

3
public String getLocalIpAddress() { 

    try { 
     for (Enumeration <NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
      NetworkInterface intf = en.nextElement(); 
      for (Enumeration <InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { 
       InetAddress inetAddress = enumIpAddr.nextElement(); 
       if (!inetAddress.isLoopbackAddress()) { 
        return inetAddress.getHostAddress().toString(); 
       } 
      } 
     } 
    } catch (SocketException ex) { 
     Log.e(LOG_TAG, ex.toString()); 
    } 
    return null; 
} 
28

あなたはIPがあなたのエミュレータに割り当てる本当にない場合:

あなたのような何か与える
adb shell 
ifconfig eth0 

eth0: ip 10.0.2.15 mask 255.255.255.0 flags [up broadcast running multicast] 
+0

これはあまりにも良かったのですが、このアドレスは私のPCからpingしていませんでした:( –

+0

[Luise](https://stackoverflow.com/users/6066443/louise):*私はDerekメソッドを試しました。 – SmokeDispenser

+0

'adbシェル'の後にこのエラーが出ます: 'ifconfig:eth0:いいえそのようなデバイスは何ですか?なぜですか? – awavi

7

すると、あなたのホストコンピュータのローカルホストを参照する必要がある場合をエミュレータクライアントを同じホスト上のサーバに接続させる場合は、別名10.0.2.2を使用して、ホストコンピュータのループバックインタフェースを参照してください。エミュレータの視点、はlocalhost(127.0.0.1)からは、独自のループバックinterface.Moreの詳細を参照:http://developer.android.com/guide/faq/commontasks.html#localhostalias

12

使用あなたがあなたのアンドロイドエミュレータのために100%正しいIPアドレスを取得します。この方法

adbのシェルにyoorエミュレータのIPアドレス

ゴーを取得し、

adb shell 
ifconfig eth0 

このコマンドを入力するには

このコマンドを実行した後、私は

IPを取得しています:10.0.2.15

マスク:255.255.255.0私の作品

。私はまた、ネットワーキングアプリケーションのために働いています。

関連する問題