Android应用开发提高篇(1)-----获取本地IP
2012-02-21 19:27
405 查看
[b]一、概述[/b]
习惯了Linux下的网络编程,在还没用智能机之前就一直想知道怎么得到手机的IP地址(玩智能机之前我是不搞手机应用的)。好了,得知Android是基于Linux内核的,那么不就可以利用之前学的Linux下的网络编程方法来获取IP了吗?呵呵,其实这是比较底层的方法,在Android上,完全可以利用Java的API来实现,而且实现的代码非常简单。下面的实现只可以获取到本地IP(内网IP),不包括外网IP,想获得外网IP的话要用其他方法。
[b]二、实现[/b]
新建工程GetIp,修改/res/layout/main.xml文件,在里面增加一个TextView文本,完整的main.xml文件如下:
接着,修改GetIp.java文件,主要是声明一个ConnectivityManager对象和一个NetworkInfo对象,编写一个对话框函数,当用户没有打开网络就运行该程序时,该对话框会提示用户检查网络。完整的GetIp.java文件如下:
最后,修改AndroidManifest.xml文件,在里面添加2个权限:
好了,不打开网络直接运行该程序,可以看到提示:
![](http://pic002.cnblogs.com/images/2012/247269/2012022119240987.png)
打开网络再运行该程序:
![](http://pic002.cnblogs.com/images/2012/247269/2012022119252615.png)
好了。
习惯了Linux下的网络编程,在还没用智能机之前就一直想知道怎么得到手机的IP地址(玩智能机之前我是不搞手机应用的)。好了,得知Android是基于Linux内核的,那么不就可以利用之前学的Linux下的网络编程方法来获取IP了吗?呵呵,其实这是比较底层的方法,在Android上,完全可以利用Java的API来实现,而且实现的代码非常简单。下面的实现只可以获取到本地IP(内网IP),不包括外网IP,想获得外网IP的话要用其他方法。
[b]二、实现[/b]
新建工程GetIp,修改/res/layout/main.xml文件,在里面增加一个TextView文本,完整的main.xml文件如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/nametextview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text=" " android:textSize="20px" /> <TextView android:id="@+id/ipTextView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text=" " android:textSize="20px" /> </LinearLayout>
接着,修改GetIp.java文件,主要是声明一个ConnectivityManager对象和一个NetworkInfo对象,编写一个对话框函数,当用户没有打开网络就运行该程序时,该对话框会提示用户检查网络。完整的GetIp.java文件如下:
package com.nan.getip; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; import java.net.InetAddress; import java.net.NetworkInterface; import java.util.Enumeration; import java.net.SocketException; import android.util.Log; import android.widget.TextView; public class GetIp extends Activity { private TextView ipTextView = null; private TextView nameTextView = null; //定义一个ConnectivityManager对象 private ConnectivityManager mConnectivityManager = null; //定义一个NetworkInfo对象 private NetworkInfo mActiveNetInfo = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); nameTextView = (TextView)findViewById(R.id.nametextview); ipTextView = (TextView)findViewById(R.id.ipTextView); //实例化mConnectivityManager对象 mConnectivityManager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);//获取系统的连接服务 //实例化mActiveNetInfo对象 mActiveNetInfo = mConnectivityManager.getActiveNetworkInfo();//获取网络连接的信息 if(mActiveNetInfo==null) myDialog(); else setUpInfo(); } //获取本地IP函数 public String getLocalIPAddress() { try { for (Enumeration<NetworkInterface> mEnumeration = NetworkInterface.getNetworkInterfaces(); mEnumeration.hasMoreElements();) { NetworkInterface intf = mEnumeration.nextElement(); for (Enumeration<InetAddress> enumIPAddr = intf.getInetAddresses(); enumIPAddr.hasMoreElements();) { InetAddress inetAddress = enumIPAddr.nextElement(); //如果不是回环地址 if (!inetAddress.isLoopbackAddress()) { //直接返回本地IP地址 return inetAddress.getHostAddress().toString(); } } } } catch (SocketException ex) { Log.e("Error", ex.toString()); } return null; } //显示IP信息 public void setUpInfo() { //如果是WIFI网络 if(mActiveNetInfo.getType()==ConnectivityManager.TYPE_WIFI) { nameTextView.setText("网络类型:WIFI"); ipTextView.setText("IP地址:"+getLocalIPAddress()); } //如果是手机网络 else if(mActiveNetInfo.getType()==ConnectivityManager.TYPE_MOBILE) { nameTextView.setText("网络类型:手机"); ipTextView.setText("IP地址:"+getLocalIPAddress()); } else { nameTextView.setText("网络类型:未知"); ipTextView.setText("IP地址:"); } } //显示对话框 private void myDialog() { AlertDialog mDialog = new AlertDialog.Builder(GetIp.this) .setTitle("注意") .setMessage("当前网络不可用,请检查网络!") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub //关闭对话框 dialog.dismiss(); //结束Activity GetIp.this.finish(); } }) .create();//创建这个对话框 mDialog.show();//显示这个对话框 } }
最后,修改AndroidManifest.xml文件,在里面添加2个权限:
<uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
好了,不打开网络直接运行该程序,可以看到提示:
![](http://pic002.cnblogs.com/images/2012/247269/2012022119240987.png)
打开网络再运行该程序:
![](http://pic002.cnblogs.com/images/2012/247269/2012022119252615.png)
好了。
相关文章推荐
- Android应用开发提高篇(1)-----获取本地IP
- Android的开发提高篇(1) - 获取本地IP
- Android开发--获取本地ip(wifi 3g)
- Android应用开发提高篇(3)-----传感器(Sensor)编程
- 【Android应用开发详解】第01期:第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料
- Android应用开发之获取网络数据
- android应用 获取本地指定类型文件 的两种最优方法
- Android开发——webview获取H5的Cookie并保存在本地
- Android应用开发系列课程------获取中国传统节日
- Android应用开发之获取web服务器xml数据
- Android开发传感器应用---获取方向传感器
- android开发之应用Crash自动抓取Log_自动保存崩溃日志到本地
- android开发之socket通信 向PC机发信息 获取本机IP
- Android退出应用获取本地SharedPreferences存储文件
- Android应用开发提高篇(6)-----FaceDetector(人脸检测)
- Android开发——webview获取H5的Cookie并保存在本地
- Android系统获取应用的Crash信息,保存在本地(可以自己实现上传到自己的服务器)
- Android native应用开发简明教程 (1) - 本地开发武器库概览
- 关于Android开发保存bitmap获取图片到本地方法
- Android应用开发获取手机电池电量的简单方法