一、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的详细介绍,通过不同的方法可以获取不同的信息,根据实际需求选择相应的方式即可。