在发送任何HTTP请求前最好检查下网络连接状态,这样可以避免异常。这个教程将会介绍怎样在你的应用中检测网络连接状态。
创建新的项目
1.在Eclipse IDE中创建一个新的项目并把填入必须的信息。 File->New->Android Project
2.创建新项目后的第一步是要在AndroidManifest.xml文件中添加必要的权限。
- 为了访问网络我们需要 INTERNET 权限
- 为了检查网络状态我们需要 ACCESS_NETWORK_STATE 权限
01 |
<? xml version = "1.0" encoding = "utf-8" ?>
|
02 |
< manifest xmlns:android = "http://schemas.android.com/apk/res/android"
|
03 |
package = "com.example.detectinternetconnection"
|
04 |
android:versionCode = "1"
|
05 |
android:versionName = "1.0" >
|
06 |
|
07 |
< uses-sdk android:minSdkVersion = "8" />
|
08 |
|
09 |
< application
|
10 |
android:icon = "@drawable/ic_launcher"
|
11 |
android:label = "@string/app_name" >
|
12 |
< activity
|
13 |
android:name = ".AndroidDetectInternetConnectionActivity"
|
14 |
android:label = "@string/app_name" >
|
15 |
< intent-filter >
|
16 |
< action android:name = "android.intent.action.MAIN" />
|
17 |
|
18 |
< category android:name = "android.intent.category.LAUNCHER" />
|
19 |
</ intent-filter >
|
20 |
</ activity >
|
21 |
</ application >
|
22 |
|
23 |
<!-- Internet Permissions -->
|
24 |
< uses-permission android:name = "android.permission.INTERNET" />
|
25 |
|
26 |
<!-- Network State Permissions -->
|
27 |
< uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />
|
28 |
|
29 |
</ manifest >
|
3.创建一个新的类,名为ConnectionDetector.java,并输入以下代码。
ConnectionDetector.java
01 |
package com.example.detectinternetconnection;
|
02 |
|
03 |
import android.content.Context;
|
04 |
import android.net.ConnectivityManager;
|
05 |
import android.net.NetworkInfo;
|
06 |
|
07 |
public class ConnectionDetector {
|
08 |
|
09 |
private Context _context;
|
10 |
|
11 |
public ConnectionDetector(Context context){
|
12 |
this ._context = context;
|
13 |
}
|
14 |
|
15 |
public boolean isConnectingToInternet(){
|
16 |
ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
17 |
if (connectivity != null )
|
18 |
{
|
19 |
NetworkInfo[] info = connectivity.getAllNetworkInfo();
|
20 |
if (info != null )
|
21 |
for ( int i = 0 ; i < info.length; i++)
|
22 |
if (info[i].getState() == NetworkInfo.State.CONNECTED)
|
23 |
{
|
24 |
return true ;
|
25 |
}
|
26 |
|
27 |
}
|
28 |
return false ;
|
29 |
}
|
30 | } |
4.当你需要在你的应用中检查网络状态时调用isConnectingToInternet()函数,它会返回true或false。
1 |
ConnectionDetector cd = new ConnectionDetector(getApplicationContext());
|
2 |
|
3 |
Boolean isInternetPresent = cd.isConnectingToInternet(); // true or false
|
5.在这个教程中为了测试我仅仅简单的放置了一个按钮。只要按下这个按钮就会弹出一个 alert dialog 显示网络连接状态。
6.打开 res/layout 目录下的 main.xml 并创建一个按钮。
main.xml
01 |
<? xml version = "1.0" encoding = "utf-8" ?>
|
02 |
< RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
|
03 |
android:layout_width = "fill_parent"
|
04 |
android:layout_height = "fill_parent"
|
05 |
android:orientation = "vertical" >
|
06 |
|
07 |
< TextView
|
08 |
android:layout_width = "fill_parent"
|
09 |
android:layout_height = "wrap_content"
|
10 |
android:text = "Detect Internet Status" />
|
11 |
|
12 |
< Button android:id = "@+id/btn_check"
|
13 |
android:layout_height = "wrap_content"
|
14 |
android:layout_width = "wrap_content"
|
15 |
android:text = "Check Internet Status"
|
16 |
android:layout_centerInParent = "true" />
|
17 |
|
18 |
</ RelativeLayout >
|
7.最后打开你的 MainActivity 文件并粘贴下面的代码。在下面的代码中我用一个 alert dialog 来显示预期的状态信息。
01 |
package com.example.detectinternetconnection;
|
02 |
|
03 |
import android.app.Activity;
|
04 |
import android.app.AlertDialog;
|
05 |
import android.content.Context;
|
06 |
import android.content.DialogInterface;
|
07 |
import android.os.Bundle;
|
08 |
import android.view.View;
|
09 |
import android.widget.Button;
|
10 |
|
11 |
public class AndroidDetectInternetConnectionActivity extends Activity {
|
12 |
|
13 |
// flag for Internet connection status
|
14 |
Boolean isInternetPresent = false ;
|
15 |
|
16 |
// Connection detector class
|
17 |
ConnectionDetector cd;
|
18 |
|
19 |
@Override
|
20 |
public void onCreate(Bundle savedInstanceState) {
|
21 |
super .onCreate(savedInstanceState);
|
22 |
setContentView(R.layout.main);
|
23 |
|
24 |
Button btnStatus = (Button) findViewById(R.id.btn_check);
|
25 |
|
26 |
// creating connection detector class instance
|
27 |
cd = new ConnectionDetector(getApplicationContext());
|
28 |
|
29 |
/**
|
30 |
* Check Internet status button click event
|
31 |
* */
|
32 |
btnStatus.setOnClickListener( new View.OnClickListener() {
|
33 |
|
34 |
@Override
|
35 |
public void onClick(View v) {
|
36 |
|
37 |
// get Internet status
|
38 |
isInternetPresent = cd.isConnectingToInternet();
|
39 |
|
40 |
// check for Internet status
|
41 |
if (isInternetPresent) {
|
42 |
// Internet Connection is Present
|
43 |
// make HTTP requests
|
44 |
showAlertDialog(AndroidDetectInternetConnectionActivity. this , "Internet Connection" ,
|
45 |
"You have internet connection" , true );
|
46 |
} else {
|
47 |
// Internet connection is not present
|
48 |
// Ask user to connect to Internet
|
49 |
showAlertDialog(AndroidDetectInternetConnectionActivity. this , "No Internet Connection" ,
|
50 |
"You don't have internet connection." , false );
|
51 |
}
|
52 |
}
|
53 |
|
54 |
});
|
55 |
|
56 |
}
|
57 |
|
58 |
/**
|
59 |
* Function to display simple Alert Dialog
|
60 |
* @param context - application context
|
61 |
* @param title - alert dialog title
|
62 |
* @param message - alert message
|
63 |
* @param status - success/failure (used to set icon)
|
64 |
* */
|
65 |
public void showAlertDialog(Context context, String title, String message, Boolean status) {
|
66 |
AlertDialog alertDialog = new AlertDialog.Builder(context).create();
|
67 |
|
68 |
// Setting Dialog Title
|
69 |
alertDialog.setTitle(title);
|
70 |
|
71 |
// Setting Dialog Message
|
72 |
alertDialog.setMessage(message);
|
73 |
|
74 |
// Setting alert dialog icon
|
75 |
alertDialog.setIcon((status) ? R.drawable.success : R.drawable.fail);
|
76 |
|
77 |
// Setting OK Button
|
78 |
alertDialog.setButton( "OK" , new DialogInterface.OnClickListener() {
|
79 |
public void onClick(DialogInterface dialog, int which) {
|
80 |
}
|
81 |
});
|
82 |
|
83 |
// Showing Alert Message
|
84 |
alertDialog.show();
|
85 |
}
|
86 | } |
运行并测试下你的程序吧!你将会得到类似下面的结果。

