Android获取本机IP地址
一、概述
习惯了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地址的更多相关文章
- 获取本机IP地址
这里有两种方法: //获取本机IP - (NSString *)localIPAddress { NSString *localIP = nil; struct ifaddrs *addrs; ) { ...
- 关于是用dotnet获取本机IP地址+计算机名的方法
印象中在maxscript帮助文档里找到过方法,但是当时没记下来.只能通过dotnet实现了. 如果电脑有无线网卡和本地连接,可能会出现乱码,也问了写dotnet的朋友,提供了一些思路,不过最终还是使 ...
- Windows下获取本机IP地址方法介绍
Windows下获取本机IP地址方法介绍 if((hostinfo = gethostbyname(name)) != NULL) { #if 1 ; printf("IP COUNT: % ...
- java获取本机IP地址
转载自:http://blog.csdn.net/thunder09/article/details/5360251 在网上找了几个用java获取本机IP地址的代码,发现都少都有些不完美,自己整理了一 ...
- C# 获取本机IP地址以及转换字符串
/// <summary> /// IP地址转化 /// </summary> /// <param name="ipaddr">整型的IP地址 ...
- QT5下获取本机IP地址、计算机名、网络连接名、MAC地址、子网掩码、广播地址
获取主机名称 /* * 名称:get_localmachine_name * 功能:获取本机机器名称 * 参数:no * 返回:QString */ QString CafesClient::get_ ...
- 详谈再论JAVA获取本机IP地址
首先,你如果搜索“JAVA获取本机IP地址”,基本上搜到的资料全是无用的.比如这篇:http://www.cnblogs.com/zrui-xyu/p/5039551.html实际上的代码在复杂环境下 ...
- Linux下获取本机IP地址的代码
Linux下获取本机IP地址的代码,返回值即为互联网标准点分格式的字符串. #define ETH_NAME "eth0" //获得本机IP地址 char* GetLocalAdd ...
- shell中获取本机ip地址
shell中获取本机ip地址 方法一: /sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr ...
随机推荐
- Android数字签名解析(二)
在Android数字签名解析(一)中,介绍了android进行签名的两种方式,当中用密钥对进行签名用到了signapk.jar这个java库. 以下我们就看看signapk签名实现过程,signapk ...
- 谈谈Linux内存释放
上上周吧,一个朋友问我说他公司的服务器内存free 为0 是为什么,意思大概是内存去哪了,这引发了一个小小的讨论,也就是内存释放的问题… 首先我们可能会用free 去查看内存的使用率,它应该是这样的 ...
- DBMS_STATS.GATHER_TABLE_STATS
由于Oracle的优化器是CBO,所以对象的统计数据对执行计划的生成至关重要! 作用:DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息(默认参数下是对表进行直方图信 ...
- hdu 2074 堆放篮 好开心图纸标题
堆放篮 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- bat脚本命令
注:本文转载地址 http://www.cnblogs.com/yefengmeander/archive/2011/12/01/2887978.html 1.Echo 命令 打开回显或关闭请求回显 ...
- 【原创】leetCodeOj ---Partition List 解题报告
原题地址: https://oj.leetcode.com/problems/partition-list/ 题目内容: Given a linked list and a value x, part ...
- 【原创】纯OO:从设计到编码写一个FlappyBird (四)
第三部分请点这里 这里来实现Obstacle类.其实flappybird的本质就是小鸟原地掉,然后几根柱子在走.这也是在Game类里,用obs.move()来实现游戏逻辑的原因. 我们首先必须确定几个 ...
- Android 内存泄漏优化汇总
android内存泄漏优化摘要 博客分类: android android内存溢出OutOfMemoryError . android移动应用程序的内存分配一般是8凯瑟琳约,不正确地假定处理内存处理非 ...
- c++分割字符串(类似于boost::split)
由于c++字符串没有split函数,所以字符串分割单词的时候必须自己手写,也相当于自己实现一个split函数吧! 如果需要根据单一字符分割单词,直接用getline读取就好了,很简单 #include ...
- asp.net访问网络路径方法(模拟用户登录)
public class IdentityScope : IDisposable { // obtains user token [DllImport("advapi32.dll" ...