安卓擷取使用者手機IP有兩種方式,一種是通過wifi擷取,一種是通過GPRS擷取。
第一種wifi方式擷取:
1.首先設定使用者權限
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
- <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
- <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
2.擷取使用者手機IP的代碼如下 ,需要注意的是androidstudio在擷取 WifiManager的時候需要使用.getApplicationContext(),如果未使用會造成記憶體洩露。
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- //擷取wifi服務
-
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
- //判斷wifi是否開啟
- if (!wifiManager.isWifiEnabled()) {
- wifiManager.setWifiEnabled(true);
- }
- WifiInfo wifiInfo = wifiManager.getConnectionInfo();
- int ipAddress = wifiInfo.getIpAddress();
- String ip = intToIp(ipAddress);
- EditText et = (EditText)findViewById(R.id.EditText01);
- et.setText(ip);
- }
- private String intToIp(int i) {
- return (i & 0xFF ) + "." +
- ((i >> 8 ) & 0xFF) + "." +
- ((i >> 16 ) & 0xFF) + "." +
- ( i >> 24 & 0xFF) ;
- }
第二種GPRS方式擷取:
1.首先,設定使用者上網權限
- <uses-permission android:name="android.permission.INTERNET"></uses-permission>
2.代碼如下
- public String getLocalIpAddress()
- {
- try
- {
- for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();)
- {
- NetworkInterface intf = en.nextElement();
- for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();)
- {
- InetAddress inetAddress = enumIpAddr.nextElement();
- if (!inetAddress.isLoopbackAddress())
- {
- return inetAddress.getHostAddress().toString();
- }
- }
- }
- }
- catch (SocketException ex)
- {
- Log.e("WifiPreference IpAddress", ex.toString());
- }
- return null;
- }