Android應用開發提高篇(1)-----獲取本地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>

好了,不打開網絡直接運行該程序,可以看到提示:

 

打開網絡再運行該程序:

 

好了。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM