Android應用開發提高篇(1)—–擷取本地IP

來源:互聯網
上載者:User

一、概述

       習慣了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>

好了,不開啟網路直接運行該程式,可以看到提示:

 

開啟網路再運行該程式:

 

好了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.