一、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-hk/n/145601.html
微信掃一掃
支付寶掃一掃