您的位置:首页 > 移动开发 > Android开发

Android获取本机IP地址

2013-07-02 23:09 295 查看
一、概述

习惯了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>
好了,不打开网络直接运行该程序,可以看到提示:



打开网络再运行该程序:



好了。

本文转自:http://www.2cto.com/kf/201203/121463.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: