Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

एंड्रॉइड डिवाइस का IP एड्रेस प्रोग्रामेटिकली कैसे प्राप्त करें?

एंड्रॉइड में डिवाइस IP एड्रेस प्राप्त करना

यह ट्यूटोरियल वाई-फाई और मोबाइल डेटा दोनों के लिए लोकल और पब्लिक IP एड्रेस प्राप्त करने के तरीकों को कवर करता है।

आवश्यक अनुमतियाँ

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" /> <!-- पब्लिक IP के लिए -->

लेआउट (activity_main.xml)

<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="24dp"
    android:gravity="center">

    <TextView
        android:id="@+id/tv_wifi_ip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:layout_marginBottom="16dp" />

    <TextView
        android:id="@+id/tv_mobile_ip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:layout_marginBottom="16dp" />

    <TextView
        android:id="@+id/tv_public_ip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp" />
</LinearLayout>

MainActivity.java - लोकल IP (वाई-फाई/मोबाइल)

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Bundle;
import android.text.format.Formatter;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;

public class MainActivity extends AppCompatActivity {
    private TextView tvWifiIp, tvMobileIp, tvPublicIp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvWifiIp = findViewById(R.id.tv_wifi_ip);
        tvMobileIp = findViewById(R.id.tv_mobile_ip);
        tvPublicIp = findViewById(R.id.tv_public_ip);

        loadLocalIPs();
        fetchPublicIP();
    }

    private void loadLocalIPs() {
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

        // एंड्रॉइड 10+ (API 29+) - NetworkCapabilities API
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            Network[] networks = cm.getAllNetworks();
            for (Network network : networks) {
                NetworkCapabilities nc = cm.getNetworkCapabilities(network);
                if (nc != null) {
                    if (nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
                        tvWifiIp.setText("वाई-फाई IP: " + getIPAddress(network));
                    } else if (nc.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
                        tvMobileIp.setText("मोबाइल IP: " + getIPAddress(network));
                    }
                }
            }
        } else {
            // लिगेसी API (डीप्रिकेटेड लेकिन पुराने वर्जन के लिए काम करता है)
            NetworkInfo wifiInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            NetworkInfo mobileInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

            if (wifiInfo != null && wifiInfo.isConnected()) {
                WifiManager wm = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
                WifiInfo wi = wm.getConnectionInfo();
                int ipAddress = wi.getIpAddress();
                tvWifiIp.setText("वाई-फाई IP: " + Formatter.formatIpAddress(ipAddress));
            }

            if (mobileInfo != null && mobileInfo.isConnected()) {
                tvMobileIp.setText("मोबाइल IP: " + getMobileIPAddress());
            }
        }
    }

    private String getIPAddress(Network network) {
        try {
            Enumeration interfaces = network.getNetworkInterfaces();
            while (interfaces.hasMoreElements()) {
                NetworkInterface ni = interfaces.nextElement();
                Enumeration addresses = ni.getInetAddresses();
                while (addresses.hasMoreElements()) {
                    InetAddress address = addresses.nextElement();
                    if (!address.isLoopbackAddress() && address instanceof java.net.Inet4Address) {
                        return address.getHostAddress();
                    }
                }
            }
        } catch (SocketException e) {
            e.printStackTrace();
        }
        return "उपलब्ध नहीं";
    }

    private String getMobileIPAddress() {
        try {
            for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
                NetworkInterface intf = en.nextElement();
                for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
                    InetAddress inetAddress = enumIpAddr.nextElement();
                    if (!inetAddress.isLoopbackAddress() && inetAddress instanceof java.net.Inet4Address) {
                        return inetAddress.getHostAddress();
                    }
                }
            }
        } catch (SocketException ex) {
            ex.printStackTrace();
        }
        return "उपलब्ध नहीं";
    }

    // पब्लिक IP के लिए - बाहरी API कॉल की आवश्यकता
    private void fetchPublicIP() {
        new Thread(() -> {
            try {
                java.net.URL url = new java.net.URL("https://api.ipify.org");
                java.net.HttpURLConnection conn = (java.net.HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                conn.setConnectTimeout(5000);
                
                java.io.BufferedReader reader = new java.io.BufferedReader(
                    new java.io.InputStreamReader(conn.getInputStream()));
                String publicIp = reader.readLine();
                reader.close();

                runOnUiThread(() -> tvPublicIp.setText("पब्लिक IP: " + publicIp));
            } catch (Exception e) {
                runOnUiThread(() -> tvPublicIp.setText("पब्लिक IP: त्रुटि - " + e.getMessage()));
            }
        }).start();
    }
}

IP एड्रेस प्रकार

प्रकार विवरण उदाहरण
लोकल (प्राइवेट) राउटर द्वारा असाइन किया गया (LAN) 192.168.x.x, 10.x.x.x
पब्लिक ISP द्वारा असाइन किया गया (इंटरनेट पर विजिबल) 203.0.113.195
IPv6 आधुनिक एड्रेसिंग स्कीम 2001:db8::1

नोट्स

  • लोकल IP के लिए किसी इंटरनेट कनेक्शन की आवश्यकता नहीं
  • पब्लिक IP के लिए नेटवर्क कॉल की आवश्यकता (ऊपर उदाहरण में ipify.org का उपयोग)
  • एंड्रॉइड 10+ में NetworkCapabilities API का उपयोग करें
  • VPN एक्टिव होने पर IP अलग हो सकता है
  1. एंड्रॉइड में प्रोग्रामेटिक रूप से डिवाइस का IMEI/ESN नंबर कैसे प्राप्त करें? एंड्रॉइड में प्रोग्रामेटिक रूप से डिवाइस का IMEI/ESN नंबर कैसे प्राप्त करें?

    READ_PHONE_STATE परमिशन के साथ IMEI नंबर प्राप्त करें यह उदाहरण दर्शाता है कि TelephonyManager का उपयोग करके डिवाइस का IMEI नंबर कैसे प्राप्त करें और रनटाइम परमिशन कैसे संभालें। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project चुनें। चरण 2: लेआउट में बटन और TextView res/layout/acti

  1. Android Emulator का IP एड्रेस कैसे प्राप्त करें? Android Emulator का IP एड्रेस कैसे प्राप्त करें?

    WifiManager का उपयोग करके Android एमुलेटर/डिवाइस का स्थानीय IP एड्रेस प्रोग्रामेटिकली प्राप्त करने का तरीका। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में नया प्रोजेक्ट बनाएं। चरण 2: लेआउट res/layout/activity_main.xml: <?xml version=1.0 encoding=utf-8?> <RelativeLayout xmlns:android=https

  1. Android डिवाइस का प्राइमरी ईमेल एड्रेस कैसे प्राप्त करें? Android डिवाइस का प्राइमरी ईमेल एड्रेस कैसे प्राप्त करें?

    परिचय यह ट्यूटोरियल दिखाता है कि Android डिवाइस पर कॉन्फ़िगर किए गए अकाउंट्स में से प्राइमरी ईमेल एड्रेस कैसे प्राप्त करें। हम AccountManager और GET_ACCOUNTS परमिशन का उपयोग करेंगे। ⚠️ महत्वपूर्ण चेतावनी नोट: यह प्रोग्राम केवल रूटेड डिवाइस पर ही काम करेगा। आधुनिक Android वर्जन (Android 6.0+) में `G