如何在Android客户端获取公网IP

在现代互联网开发中,获取客户端的公网IP地址是一个常见需求。今天,我将指导你如何在Android客户端上实现这一功能。以下是整个流程的概述:

步骤 描述
1 确定使用的API
2 创建Android项目并添加网络权限
3 使用网络请求获取公网IP地址
4 显示公网IP地址

步骤详解

1. 确定使用的API

为了获取公网IP,我们将使用一个免费的公共IP服务,如 `

2. 创建Android项目并添加网络权限

首先,创建一个新的Android项目,并在 AndroidManifest.xml 中添加网络权限:

<manifest xmlns:android="
    package="com.example.getpublicip">

    <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/Theme.AppCompat.Light">
        <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>

注释:此段代码赋予应用程序使用互联网的权限。

3. 使用网络请求获取公网IP地址

在主活动 MainActivity.java 中,我们将使用 OkHttp 进行网络请求(需额外依赖)。

添加依赖到 build.gradle 文件中:

dependencies {
    implementation 'com.squareup.okhttp3:okhttp:4.9.0'
}

注释:引入OkHttp库以便用于网络请求。

接下来在 MainActivity.java 中添加以下代码:

import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {

    private TextView ipTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        ipTextView = findViewById(R.id.ipTextView);
        
        getPublicIP();
    }

    private void getPublicIP() {
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url("
                .build();

        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
                ipTextView.setText("Error fetching IP");
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful() && response.body() != null) {
                    final String publicIP = response.body().string();
                    runOnUiThread(() -> ipTextView.setText("Your Public IP: " + publicIP));
                }
            }
        });
    }
}

注释:上述代码使用OkHttp进行GET请求,获取公网IP并显示在TextView中。

4. 显示公网IP地址

在您的 activity_main.xml 布局文件中创建一个用于显示IP地址的 TextView

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/ipTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Your Public IP will appear here"
        android:layout_centerInParent="true"/>
</RelativeLayout>

注释:该布局文件用于设置TextView的位置和文本。

类图

以下是类图示例,使用了 mermaid 语法:

classDiagram
    class MainActivity {
        +TextView ipTextView
        +void onCreate(Bundle savedInstanceState)
        +void getPublicIP()
    }

结尾

通过这个简单的步骤,你已经学习了如何在Android应用中获取用户的公网IP地址。我希望这个指南对你有帮助。在实际开发中,多尝试、多实践,你会越做越好!如有疑问,随时提问。