一、Android獲取IP地址權限
在Android系統中,獲取IP地址需要使用網絡狀態權限,可以通過以下代碼獲取網絡狀態權限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" />
其中,ACCESS_NETWORK_STATE是獲取網絡狀態的權限,INTERNET是使用網絡的權限。
二、Android獲取IP
在Android系統中,可以通過以下代碼獲取IP:
public String getIPAddress(boolean useIPv4) { try { List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface intf : interfaces) { List<InetAddress> addrs = Collections.list(intf.getInetAddresses()); for (InetAddress addr : addrs) { if (!addr.isLinkLocalAddress()) { String sAddr = addr.getHostAddress(); boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr); if (useIPv4) { if (isIPv4) return sAddr; } else { if (!isIPv4) { int delim = sAddr.indexOf('%'); // 分離IPv6地址中的zone return delim<0 ? sAddr.toUpperCase() : sAddr.substring(0, delim).toUpperCase(); } } } } } } catch (Exception e) { Log.e("getIPAddress", e.toString()); } return ""; }
其中,getNetworkInterfaces()方法獲取網絡接口列表,getInetAddresses()方法獲取網絡接口的IP地址列表。
三、Android獲取OAID
OAID是一種由中國移動廣告聯盟提出的Android設備標識符,可以用於替代AndroidID等識別標識符,一些手機品牌已開放獲取OAID的API。
獲取OAID的方式如下所示:
import com.bun.miitmdid.core.JLibrary; public class MainActivity extends AppCompatActivity { TextView tv_oaid; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv_oaid = findViewById(R.id.tv_oaid); // 初始化OAID庫 JLibrary.InitEntry(this); // 獲取OAID MiitHelper miitHelper = new MiitHelper(new MiitHelper.AppIdsUpdater() { @Override public void OnIdsAvalid(@NonNull final String ids) { tv_oaid.setText(ids); } }); miitHelper.getDeviceIds(this); } }
四、Android獲取IP地址不準確的問題
在Android系統中,獲取IP地址的方法可能會因為手機的網絡模式而導致不準確的問題,可以通過以下代碼規避問題:
public String getIPAddress() { WifiManager wm = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress()); return ip; }
其中,WIFI_SERVICE是獲取WIFI服務的系統服務,getConnectionInfo()方法獲取WIFI連接信息,getIpAddress()方法獲取IP地址。
五、Android獲取IP和MAC地址
Android系統中,可以通過WifiManager類獲取IP和MAC地址:
public String getIpAddress() { WifiManager wm = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress()); return ip; } public String getMacAddress() { WifiManager wm = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); return wm.getConnectionInfo().getMacAddress(); }
其中,getMacAddress()方法獲取MAC地址。
六、Android獲取IPv4和IPv6地址
Android系統中,可以通過以下代碼分別獲取IPv4和IPv6地址:
public String getIPv4Address() { try { List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface iface : interfaces) { List<InetAddress> addrs = Collections.list(iface.getInetAddresses()); for (InetAddress addr : addrs) { if (!addr.isLoopbackAddress() && addr instanceof Inet4Address) { return addr.getHostAddress(); } } } } catch (Exception e) { Log.e("getIPv4Address", e.toString()); } return ""; } public String getIPv6Address() { try { List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface iface : interfaces) { List<InetAddress> addrs = Collections.list(iface.getInetAddresses()); for (InetAddress addr : addrs) { if (!addr.isLoopbackAddress() && addr instanceof Inet6Address) { return addr.getHostAddress(); } } } } catch (Exception e) { Log.e("getIPv6Address", e.toString()); } return ""; }
七、獲取AndroidID
AndroidID是Android系統中的一個字符串,用於標識設備。它在設備首次啟動時生成,並且無法更改。
獲取AndroidID的方式如下所示:
public String getAndroidID() { String android_id = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID); return android_id; }
八、結語
以上就是Android獲取IP的詳細介紹,通過不同的方法可以獲取不同的信息,根據實際需求選擇相應的方式即可。
原創文章,作者:WOYZ,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/145601.html