एंड्रॉइड में डिवाइस 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+ में
NetworkCapabilitiesAPI का उपयोग करें - VPN एक्टिव होने पर IP अलग हो सकता है