이 튜토리얼에서는 WifiManager를 활용하여 Android 에뮬레이터(및 실제 디바이스)의 IP 주소를 가져오는 방법을 단계별로 살펴봅니다. 버튼을 클릭하면 현재 네트워크 연결의 IP 주소를 화면에 표시하는 간단한 앱을 만들어 보겠습니다.
1단계: 새 프로젝트 생성
Android Studio에서 File → New Project를 선택한 후, 프로젝트 생성에 필요한 모든 정보를 입력하여 새 프로젝트를 만듭니다.
2단계: 레이아웃 파일 작성
res/layout/activity_main.xml 파일에 아래 코드를 추가합니다. 중앙에 TextView 하나와 그 아래에 'Get IP Address' 버튼 하나를 배치하는 구조입니다.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:textSize="16sp"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView"
android:layout_centerInParent="true"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnGetIPAddress"
android:text="Get IP Address"
android:layout_below="@id/textView"
android:layout_marginTop="10dp"
android:layout_centerInParent="true"/>
</RelativeLayout>3단계: MainActivity 코드 작성
src/MainActivity.java 파일에 아래 코드를 추가합니다. 핵심 로직은 WifiManager.getConnectionInfo().getIpAddress()로 현재 Wi-Fi 연결의 IP 주소를 정수형으로 받아온 뒤, Formatter.formatIpAddress()를 사용해 사람이 읽을 수 있는 문자열 형태로 변환하는 것입니다.
import androidx.appcompat.app.AppCompatActivity;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.text.format.Formatter;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
Button button;
TextView textview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textview = findViewById(R.id.textView);
button = findViewById(R.id.btnGetIPAddress);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
GetIPAddress();
}
});
}
private void GetIPAddress() {
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); assert wifiManager != null;
String ip = Formatter.formatIpAddress(wifiManager.getConnectionInfo().getIpAddress());
textview.setText(String.format("IP Address: %s", ip));
}
}4단계: 매니페스트에 권한 추가
Wi-Fi 상태 정보와 네트워크 접근을 위해 androidManifest.xml 파일에 아래 두 가지 권한을 반드시 선언해야 합니다.
ACCESS_WIFI_STATE: Wi-Fi 연결 상태 정보 조회INTERNET: 네트워크 통신 허용
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>앱 실행 및 결과 확인
이제 애플리케이션을 실행해 보겠습니다. 실제 Android 스마트폰을 컴퓨터에 연결했다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바의 Run 아이콘을 클릭하세요. 실행 옵션 목록에서 모바일 디바이스(또는 에뮬레이터)를 선택하면, 해당 기기에 앱이 설치되고 기본 화면이 표시됩니다.
화면 중앙의 Get IP Address 버튼을 누르면, 현재 연결된 네트워크의 IP 주소가 TextView에 출력되는 것을 확인할 수 있습니다.

참고 사항
Android 에뮬레이터는 일반적으로 내부 네트워크인 10.0.2.15 형태의 IP 주소를 할당받으며, 호스트 PC는 10.0.2.2로 접근됩니다. 또한 API 31 이상에서는 Formatter.formatIpAddress()가 deprecated되었으므로, 최신 환경에서는 InetAddress나 NetworkInterface를 활용하는 방식도 함께 고려해 보시기 바랍니다.