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

Android应用开发提高篇(1)-----获取本地IP

2018-03-12 12:16 267 查看
链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/21/2361802.html

一、概述

习惯了Linux下的网络编程,在还没用智能机之前就一直想知道怎么得到手机的IP地址(玩智能机之前我是不搞手机应用的)。好了,得知Android是基于Linux内核的,那么不就可以利用之前学的Linux下的网络编程方法来获取IP了吗?呵呵,其实这是比较底层的方法,在Android上,完全可以利用Java的API来实现,而且实现的代码非常简单。下面的实现只可以获取到本地IP(内网IP),不包括外网IP,想获得外网IP的话要用其他方法。

二、实现

新建工程GetIp,修改/res/layout/main.xml文件,在里面增加一个TextView文本,完整的main.xml文件如下:

1<?xmlversion="1.0"encoding="utf-8"?>
2<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
3android:orientation="vertical"
4android:layout_width="fill_parent"
5android:layout_height="fill_parent"
6>
7
8<TextView
9android:id="@+id/nametextview"
10android:layout_width="fill_parent"
11android:layout_height="wrap_content"
12android:text=""
13android:textSize="20px"
14/>
15
16<TextView
17android:id="@+id/ipTextView"
18android:layout_width="fill_parent"
19android:layout_height="wrap_content"
20android:text=""
21android:textSize="20px"
22/>
23
24</LinearLayout>


接着,修改GetIp.java文件,主要是声明一个ConnectivityManager对象和一个NetworkInfo对象,编写一个对话框函数,当用户没有打开网络就运行该程序时,该对话框会提示用户检查网络。完整的GetIp.java文件如下:

1packagecom.nan.getip;
2
3importandroid.app.Activity;
4importandroid.app.AlertDialog;
5importandroid.content.DialogInterface;
6importandroid.net.ConnectivityManager;
7importandroid.net.NetworkInfo;
8importandroid.os.Bundle;
9importjava.net.InetAddress;
10importjava.net.NetworkInterface;
11importjava.util.Enumeration;
12importjava.net.SocketException;
13importandroid.util.Log;
14importandroid.widget.TextView;
15
16
17publicclassGetIpextendsActivity
18{
19privateTextViewipTextView=null;
20privateTextViewnameTextView=null;
21//定义一个ConnectivityManager对象
22privateConnectivityManagermConnectivityManager=null;
23//定义一个NetworkInfo对象
24privateNetworkInfomActiveNetInfo=null;
25
26/**Calledwhentheactivityisfirstcreated.*/
27@Override
28publicvoidonCreate(BundlesavedInstanceState)
29{
30super.onCreate(savedInstanceState);
31setContentView(R.layout.main);
32
33nameTextView=(TextView)findViewById(R.id.nametextview);
34ipTextView=(TextView)findViewById(R.id.ipTextView);
35//实例化mConnectivityManager对象
36mConnectivityManager=(ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);//获取系统的连接服务
37//实例化mActiveNetInfo对象
38mActiveNetInfo=mConnectivityManager.getActiveNetworkInfo();//获取网络连接的信息
39if(mActiveNetInfo==null)
40myDialog();
41else
42setUpInfo();
43
44}
45
46//获取本地IP函数
47publicStringgetLocalIPAddress()
48{
49try
50{
51for(Enumeration<NetworkInterface>mEnumeration=NetworkInterface.getNetworkInterfaces();mEnumeration.hasMoreElements();)
52{
53NetworkInterfaceintf=mEnumeration.nextElement();
54for(Enumeration<InetAddress>enumIPAddr=intf.getInetAddresses();enumIPAddr.hasMoreElements();)
55{
56InetAddressinetAddress=enumIPAddr.nextElement();
57//如果不是回环地址
58if(!inetAddress.isLoopbackAddress())
59{
60//直接返回本地IP地址
61returninetAddress.getHostAddress().toString();
62}
63}
64}
65}
66catch(SocketExceptionex)
67{
68Log.e("Error",ex.toString());
69}
70returnnull;
71}
72
73//显示IP信息
74publicvoidsetUpInfo()
75{
76//如果是WIFI网络
77if(mActiveNetInfo.getType()==ConnectivityManager.TYPE_WIFI)
78{
79nameTextView.setText("网络类型:WIFI");
80ipTextView.setText("IP地址:"+getLocalIPAddress());
81}
82//如果是手机网络
83elseif(mActiveNetInfo.getType()==ConnectivityManager.TYPE_MOBILE)
84{
85nameTextView.setText("网络类型:手机");
86ipTextView.setText("IP地址:"+getLocalIPAddress());
87}
88else
89{
90nameTextView.setText("网络类型:未知");
91ipTextView.setText("IP地址:");
92}
93
94}
95
96//显示对话框
97privatevoidmyDialog()
98{
99AlertDialogmDialog=newAlertDialog.Builder(GetIp.this)
100.setTitle("注意")
101.setMessage("当前网络不可用,请检查网络!")
102.setPositiveButton("确定",newDialogInterface.OnClickListener()
103{
104
105@Override
106publicvoidonClick(DialogInterfacedialog,intwhich)
107{
108//TODOAuto-generatedmethodstub
109//关闭对话框
110dialog.dismiss();
111//结束Activity
112GetIp.this.finish();
113}
114})
115.create();//创建这个对话框
116mDialog.show();//显示这个对话框
117}
118
119}


最后,修改AndroidManifest.xml文件,在里面添加2个权限:

<uses-permissionandroid:name="android.permission.INTERNET"></uses-permission>
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>


好了,不打开网络直接运行该程序,可以看到提示:



打开网络再运行该程序:



好了。

标签:Android开发

好文要顶关注我收藏该文







lknlfy
关注-0
粉丝-166

+加关注

0
0

(请您对文章做出评价)

«上一篇:Android应用开发基础篇(6)-----Service
»下一篇:Android应用开发基础篇(7)-----BroadcastReceiver

posted@2012-02-2119:27lknlfy阅读(2319)评论(1)编辑收藏

评论

回复引用

#1楼2012-03-0412:18|陈小道

写的很好,不仅内容好,而且排版清晰。
我原来也写过获ip的当不知道为什么老是获得的是ipv6。
后来我改成这样了:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐