关于android Ip地址的获取
1.如果使用WIFI可以用android自带的类来获取IP
首先设置用户权限
<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permissionandroid:name="android.permission.WAKE_LOCK"></uses-permission>
其次,代码如下
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- //获取wifi服务
- WifiManagerwifiManager=(WifiManager)getSystemService(Context.WIFI_SERVICE);
- //判断wifi是否开启
- if(!wifiManager.isWifiEnabled()){
- wifiManager.setWifiEnabled(true);
- }
- WifiInfowifiInfo=wifiManager.getConnectionInfo();
- intipAddress=wifiInfo.getIpAddress();
- Stringip=intToIp(ipAddress);
- EditTextet=(EditText)findViewById(R.id.EditText01);
- et.setText(ip);
- }
- privateStringintToIp(inti){
- return(i&0xFF)+"."+
- ((i>>8)&0xFF)+"."+
- ((i>>16)&0xFF)+"."+
- (i>>24&0xFF);
- }
2.java方法:这时相当于是用的java的类来获取ip,其实这个不仅可以获得GPRS的,wifi的一样能够获取!
首先,设置用户上网权限
<uses-permissionandroid:name="android.permission.INTERNET"></uses-permission>
其次,代码如下
- publicStringgetLocalIpAddress()
- {
- try
- {
- for(Enumeration<NetworkInterface>en=NetworkInterface.getNetworkInterfaces();en.hasMoreElements();)
- {
- NetworkInterfaceintf=en.nextElement();
- for(Enumeration<InetAddress>enumIpAddr=intf.getInetAddresses();enumIpAddr.hasMoreElements();)
- {
- InetAddressinetAddress=enumIpAddr.nextElement();
- if(!inetAddress.isLoopbackAddress())
- {
- returninetAddress.getHostAddress().toString();
- }
- }
- }
- }
- catch(SocketExceptionex)
- {
- Log.e("WifiPreferenceIpAddress",ex.toString());
- }
- returnnull;
- }
3.可以通过创建一个socket,通过socket来获取本地的IP地址。
try{
Socket socket = new Socket("www.baidu.com", 80);
Log.i("", socket.getLocalAddress().toString());)}
catch(Exception e){
Log.i("",e.getMessage());
}
总之其实完全可以通过下面这个完整的文件来实现以上三个方法:
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.Socket;
import java.util.Enumeration;
import android.app.Activity;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.text.format.Formatter;
import android.widget.EditText;
import android.widget.TextView;
public class IpAddressgetActivity extends Activity{
//private TextView mText;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
EditText et =(EditText)findViewById(R.id.edittext01);
String ip = null;
//Method 1
WifiManager wifiManager = (WifiManager)getSystemService(WIFI_SERVICE);
WifiInfo info =wifiManager.getConnectionInfo();
ip = "wifiInfo :" +Formatter.formatIpAddress(info.getIpAddress());
ip += "\n";
//Method 2
try{
Socket socket = new Socket("10.40.73.41", 80);
ip += "socket : " + socket.getLocalAddress().toString() +"\n";
} catch (Exception e) {
e.printStackTrace();
//throw new RuntimeException();
}
//Method 3
try {
Enumeration<NetworkInterface>interfaces =NetworkInterface.getNetworkInterfaces();
NetworkInterface inf =interfaces.nextElement();
for (Enumeration<InetAddress>enumAddress =inf.getInetAddresses();enumAddress.hasMoreElements();){
InetAddress in = enumAddress.nextElement();
if(!in.isLinkLocalAddress()) {
ip += "NetworkInterface : " + in.getHostAddress() +"\n";
}
}
}catch (Exception e) {
e.printStackTrace();
//throw new RuntimeException();
}
et.setText(ip);
}
}更多相关文章
- 通过ddmlib杀死某个android进程的方法
- Android一些常用知识和代码(不断更新)
- Android之 inflate() 方法总结
- Android读取服务器图片的三种方法
- android播放本地工程里的音乐和视频的方法
- ActionBar的一些使用方法
- H5调用原生APP的js方法