一、概述

习惯了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

Android获取本机IP地址的更多相关文章

  1. 获取本机IP地址

    这里有两种方法: //获取本机IP - (NSString *)localIPAddress { NSString *localIP = nil; struct ifaddrs *addrs; ) { ...

  2. 关于是用dotnet获取本机IP地址+计算机名的方法

    印象中在maxscript帮助文档里找到过方法,但是当时没记下来.只能通过dotnet实现了. 如果电脑有无线网卡和本地连接,可能会出现乱码,也问了写dotnet的朋友,提供了一些思路,不过最终还是使 ...

  3. Windows下获取本机IP地址方法介绍

    Windows下获取本机IP地址方法介绍 if((hostinfo = gethostbyname(name)) != NULL) { #if 1 ; printf("IP COUNT: % ...

  4. java获取本机IP地址

    转载自:http://blog.csdn.net/thunder09/article/details/5360251 在网上找了几个用java获取本机IP地址的代码,发现都少都有些不完美,自己整理了一 ...

  5. C# 获取本机IP地址以及转换字符串

    /// <summary> /// IP地址转化 /// </summary> /// <param name="ipaddr">整型的IP地址 ...

  6. QT5下获取本机IP地址、计算机名、网络连接名、MAC地址、子网掩码、广播地址

    获取主机名称 /* * 名称:get_localmachine_name * 功能:获取本机机器名称 * 参数:no * 返回:QString */ QString CafesClient::get_ ...

  7. 详谈再论JAVA获取本机IP地址

    首先,你如果搜索“JAVA获取本机IP地址”,基本上搜到的资料全是无用的.比如这篇:http://www.cnblogs.com/zrui-xyu/p/5039551.html实际上的代码在复杂环境下 ...

  8. Linux下获取本机IP地址的代码

    Linux下获取本机IP地址的代码,返回值即为互联网标准点分格式的字符串. #define ETH_NAME "eth0" //获得本机IP地址 char* GetLocalAdd ...

  9. shell中获取本机ip地址

    shell中获取本机ip地址 方法一: /sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr ...

随机推荐

  1. EBS并发管理器请求汇总(按照并发消耗时间,等待时间,平均等待事件等汇总)

    此数据集用于确定正在使用中并发管理器,并可与实际的在启动时分配的并发管理器.而且考虑完成状态为 正常/警告 的请求. select q.concurrent_queue_name, count(*) ...

  2. Learning Cocos2d-x for WP8(1)——创建首个项目

    原文:Learning Cocos2d-x for WP8(1)--创建首个项目 Cocos2d-x for WP8开发语言是C++,系列文章将参考兄弟篇Learning Cocos2d-x for ...

  3. 从零开始学Xamarin.Forms(一) 概述

    原文:从零开始学Xamarin.Forms(一) 概述     Xamarin 读 "ˈzæmərin",是一个基于开源项目mono的能够使用C#开发的收费的跨平台(iOS.And ...

  4. 编辑简单的 shell程序

    编辑简单的 shell程序 知道了vi编辑器的使用规则之后,结合shell的使用规则,可以编辑简单的 shell程序试试手 题目如下: 1.用while语句创建一个根据输入的数值求累加和(1+2+3+ ...

  5. .NET垃圾回收笔记

    名词 垃圾收集目标 ephemeral GC 发生在Gen 0 和Gen 1 的垃圾收集 Full GC 发生Gen 2 及以上的Gen与LOH的垃圾收集 垃圾收集模式 工作站模式 GC直接发生在内存 ...

  6. ByteBuffer的allocate和allocateDirect

    在Java中当我们要对数据进行更底层的操作时,一般是操作数据的字节(byte)形式,这时经常会用到ByteBuffer这样一个类.ByteBuffer提供了两种静态实例方式: public stati ...

  7. SQL之性能优化

     在实际应用中.数据库中的数据会有非常多.若要从这些数据表中检索数据,就须要对系统进行优化,提高数据库系统的响应速度,以下就是日常一些查询优化的方法. 1.创建索引 索引能够提高数据库查询的速度, ...

  8. Win 10开门人类智慧的世界领先

    3月18日,从微软硬件project大会(WinHEC 2015)上传来好消息:今年夏天,Win 10将要正式公布.Win 10公布,有何新意? 微软新领导人纳德拉(Nadella)主张:运计算,大数 ...

  9. CenOS下安装jdk

    1. 安装JDK1.7.0 下载完成后在取得root权限后执行: [root@sea sea]# sudo rpm -ivh /目录/jdk-7-linux-x64.rpm 执行结果: Prepari ...

  10. C语言中的函数指针

    C语言中的函数指针 函数指针的概念:   函数指针是一个指向位于代码段的函数代码的指针. 函数指针的使用: #include<stdio.h> typedef struct (*fun_t ...