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文件如下:
接着,修改GetIp.java文件,主要是声明一个ConnectivityManager对象和一个NetworkInfo对象,编写一个对话框函数,当用户没有打开网络就运行该程序时,该对话框会提示用户检查网络。完整的GetIp.java文件如下:
最后,修改AndroidManifest.xml文件,在里面添加2个权限:
好了,不打开网络直接运行该程序,可以看到提示:
打开网络再运行该程序:
好了。
标签: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。
后来我改成这样了:
一、概述
习惯了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>
好了,不打开网络直接运行该程序,可以看到提示:
打开网络再运行该程序:
好了。
标签:
好文要顶关注我收藏该文
+加关注
0
0
(请您对文章做出评价)
posted@2012-02-2119:27
评论
回复引用
写的很好,不仅内容好,而且排版清晰。
我原来也写过获ip的当不知道为什么老是获得的是ipv6。
后来我改成这样了:
相关文章推荐
- Android应用开发提高篇(1)-----获取本地IP
- Android的开发提高篇(1) - 获取本地IP
- Android开发--获取本地ip(wifi 3g)
- Android应用开发提高篇(4)-----Socket编程(多线程、双向通信)
- Android应用开发提高系列(2)——《Practical Java 中文版》读书笔记(下)
- Android应用开发提高篇(2)-----文本朗读TTS(TextToSpeech)
- android开发之socket通信 向PC机发信息 获取本机IP
- Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类
- Android应用开发提高系列(5)——Android动态加载(下)——加载已安装APK中的类和资源
- Android应用开发提高篇(6)-----FaceDetector(人脸检测)
- Android应用开发提高系列(3)——《Effective Java 中文版》读书笔记
- Android 手机应用开发经验 之 通过Socket(TCP/IP)与PC通讯
- Android应用开发提高系列(2)——《Practical Java 中文版》读书笔记(下)
- Android应用开发提高系列(2)——《Practical Java 中文版》读书笔记(下)
- Android应用开发揭秘里的EX_03_02获取联系人号码的获取方法的修正
- Android应用开发提高系列(1)——《Practical Java 中文版》读书笔记(上)
- Android应用开发提高系列(5)——Android动态加载(下)——加载已安装APK中的类和资源
- Android应用开发提高系列(3)——《Effective Java 中文版》读书笔记
- Android应用开发之获取web服务器xml数据
- Android 手机应用开发经验 之 通过Socket(TCP/IP)与PC通讯