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 ...
随机推荐
- Oracle语句集锦
创建用户并赋予dba权限 1)进入cmd 2)sqlplus / as sysdba 或者 sqlplus sys/密码 as sysdba SQL> conn sys/wcq123@orcl ...
- javaEE jdbc编程步骤
1.载入数据库驱动(jar文件) //须要下载一个数据库的jar包,并导入对应的JDBC项目中,创建路径! Class.forName("com.mysql.jdbc.Driver" ...
- Linux日志清除
因为数据要求.经常需要抓住和筛选过滤数据,大概花了7 8个月.改变了机旁数据.重新开始,发现"No space left on device" 解决方法: 直接删除日志(简单粗暴) ...
- MySQL和Oracle开发差异
1) 数据类型差异 Oracle MySQL 注释 单独创建序列来实现 自动增长的数据类型 varchar2 varchar number tinyint,smallint,mediumint,in ...
- HTML5 CSS3 诱人的实例 : 网页载入进度条的实现,下载进度条等
今天给大家带来一个比較炫的进度条,进度条在一耗时操作上给用户一个比較好的体验,不会让用户认为在盲目等待,对于没有进度条的长时间等待,用户会任务死机了,毫不犹豫的关掉应用:一般用于下载任务,删除大量任务 ...
- 查看文章strncpy()功能更好的文章
strncpy()功能 原型:extern char *strncpy(char *dest, char *src, int n); 使用方法:#include <string.h> ...
- codeforces #256 A. Rewards
A. Rewards time limit per test 1 second memory limit per test 256 megabytes input standard input out ...
- 冷市攻略:Listo 教你 25 今天的社会 Swift 语言 - 02 Swift Tour
import Foundation //******************************************************************************** ...
- MVC Razor标签
1. RenderBody在Razor引擎中没有了“母版页”,取而代之的是叫做“布局”的页面(_Layout.cshtml)放在了共享视图文件夹中.在这个页面中,会看到标签里有这样一条语句:@Rend ...
- [LeetCode]Palindrome Partitioning 找出所有可能的组合回文
给定一个字符串,切割字符串,这样每个子字符串是一个回文字符串. 要找出所有可能的组合. 办法:暴力搜索+回溯 class Solution { public: int *b,n; vector< ...