Android开发提高篇(1)-----获取本地IP
4365 点击·0 回帖
![]() | ![]() | |
![]() | 一、概述 习惯了Linux下的网络编程,在还没用智能机之前就一直想知道怎么得到手机的IP地址(玩智能机之前我是不搞手机应用的)。好了,得知Android是基于Linux内核的,那么不就可以利用之前学的Linux下的网络编程方法来获取IP了吗?呵呵,其实这是比较底层的方法,在Android上,完全可以利用java的API来实现,而且实现的代码非常简单。下面的实现只可以获取到本地IP(内网IP),不包括外网IP,想获得外网IP的话要用其他方法。 二、实现 新建工程GetIp,修改/res/layout/main.xml文件,在里面增加一个TextView文本,完整的main.xml文件如下: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android" 3 Android:orientation="vertical" 4 Android:layout_width="fill_parent" 5 Android:layout_height="fill_parent" 6 > 7 8 <TextView 9 Android:id="@+id/nametextview" 10 Android:layout_width="fill_parent" 11 Android:layout_height="wrap_content" 12 Android:text=" " 13 Android:textSize="20px" 14 /> 15 16 <TextView 17 Android:id="@+id/ipTextView" 18 Android:layout_width="fill_parent" 19 Android:layout_height="wrap_content" 20 Android:text=" " 21 Android:textSize="20px" 22 /> 23 24 </LinearLayout> 接着,修改GetIp.java文件,主要是声明一个ConnectivityManager对象和一个NetworkInfo对象,编写一个对话框函数,当用户没有打开网络就运行该程序时,该对话框会提示用户检查网络。完整的GetIp.java文件如下: 1 package com.nan.getip; 2 3 import Android.app.Activity; 4 import Android.app.AlertDialog; 5 import Android.content.Dialoginterface; 6 import Android.net.ConnectivityManager; 7 import Android.net.NetworkInfo; 8 import Android.os.Bundle; 9 import java.net.InetAddress; 10 import java.net.NetworkInterface; 11 import java.util.Enumeration; 12 import java.net.SocketException; 13 import Android.util.Log; 14 import Android.widget.TextView; 15 16 17 public class GetIp extends Activity 18 { 19 private TextView ipTextView = null; 20 private TextView nameTextView = null; 21 //定义一个ConnectivityManager对象 22 private ConnectivityManager mConnectivityManager = null; 23 //定义一个NetworkInfo对象 24 private NetworkInfo mActiveNetInfo = null; 25 26 /** Called when the activity is first created. */ 27 @Override 28 public void onCreate(Bundle savedInstanceState) 29 { 30 super.onCreate(savedInstanceState); 31 setContentView(R.layout.main); 32 33 nameTextView = (TextView)findViewById(R.id.nametextview); 34 ipTextView = (TextView)findViewById(R.id.ipTextView); 35 //实例化mConnectivityManager对象 36 mConnectivityManager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);//获取系统的连接服务 37 //实例化mActiveNetInfo对象 38 mActiveNetInfo = mConnectivityManager.getActiveNetworkInfo();//获取网络连接的信息 39 if(mActiveNetInfo==null) 40 myDialog(); 41 else 42 setUpInfo(); 43 44 } 45 46 //获取本地IP函数 47 public String getLocalIPAddress() 48 { 49 try 50 { 51 for (Enumeration<NetworkInterface> mEnumeration = NetworkInterface.getNetworkInterfaces(); mEnumeration.hasMoreElements();) 52 { 53 NetworkInterface intf = mEnumeration.nextElement(); 54 for (Enumeration<InetAddress> enumIPAddr = intf.getInetAddresses(); enumIPAddr.hasMoreElements();) 55 { 56 InetAddress inetAddress = enumIPAddr.nextElement(); 57 //如果不是回环地址 58 if (!inetAddress.isLoopbackAddress()) 59 { 60 //直接返回本地IP地址 61 return inetAddress.getHostAddress().toString(); 62 } 63 } 64 } 65 } 66 catch (SocketException ex) 67 { 68 Log.e("Error", ex.toString()); 69 } 70 return null; 71 } 72 73 //显示IP信息 74 public void setUpInfo() 75 { 76 //如果是wifi网络 77 if(mActiveNetInfo.getType()==ConnectivityManager.TYPE_WIFI) 78 { 79 nameTextView.setText("网络类型:WIFI"); 80 ipTextView.setText("IP地址:"+getLocalIPAddress()); 81 } 82 //如果是手机网络 83 else if(mActiveNetInfo.getType()==ConnectivityManager.TYPE_MOBILE) 84 { 85 nameTextView.setText("网络类型:手机"); 86 ipTextView.setText("IP地址:"+getLocalIPAddress()); 87 } 88 else 89 { 90 nameTextView.setText("网络类型:未知"); 91 ipTextView.setText("IP地址:"); 92 } 93 94 } 95 96 //显示对话框 97 private void myDialog() 98 { 99 AlertDialog mDialog = new AlertDialog.Builder(GetIp.this) 100 .setTitle("注意") 101 .setMessage("当前网络不可用,请检查网络!") 102 .setPositiveButton("确定", new DialogInterface.OnClickListener() 103 { 104 105 @Override 106 public void onClick(DialogInterface dialog, int which) 107 { 108 // TODO Auto-generated method stub 109 //关闭对话框 110 dialog.dismiss(); 111 //结束Activity 112 GetIp.this.finish(); 113 } 114 }) 115 .create();//创建这个对话框 116 mDialog.show();//显示这个对话框 117 } 118 119 } 最后,修改AndroidManifest.xml文件,在里面添加2个权限: <uses-permission Android:name="Android.permission.INTERNET"></uses-permission> <uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE"></uses-permission> 好了,不打开网络直接运行该程序,可以看到提示: ![]() 打开网络再运行该程序: ![]() 好了。 | |
![]() | ![]() |