擷取網路連接狀態
隨著3G和Wifi的推廣,越來越多的Android應用程式需要調用網路資源,檢測網路連接狀態也就成為網路應用程式所必備的功能。
Android平台提供了ConnectivityManager 類,用於網路連接狀態的檢測。
Android開發文檔這樣描述ConnectivityManager 的作用:
Class that answers queries about the state of network connectivity. It also notifies applications when network connectivity changes. Get an instance of this class by calling
Context.getSystemService(Context.CONNECTIVITY_SERVICE).
The primary responsibilities of this class are to:
Monitor network connections (Wi-Fi, GPRS, UMTS, etc.)
Send broadcast intents when network connectivity changes
Attempt to "fail over" to another network when connectivity to a network is lost
Provide an API that allows applications to query the coarse-grained or fine-grained state of the available networks
下面這個簡單的例子 checkNetworkInfo() 說明了如何編程擷取Android手機的當前網路狀態
[java] private void checkNetworkInfo()
{
ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
//mobile 3G Data Network
State mobile = conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
txt3G.setText(mobile.toString()); //顯示3G網路連接狀態
//wifi
State wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
txtWifi.setText(wifi.toString()); //顯示wifi串連狀態
}
private void checkNetworkInfo()
{
ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
//mobile 3G Data Network
State mobile = conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
txt3G.setText(mobile.toString()); //顯示3G網路連接狀態
//wifi
State wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
txtWifi.setText(wifi.toString()); //顯示wifi串連狀態
}
注:
根據Android的安全機制,在使用ConnectivityManager時,必須在AndroidManifest.xml中添加<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" /> 否則無法獲得系統的許可。
運行結果(關閉3G及wifi網路連接的狀態下)
調用Android手機的網路設定介面
使用過Android手機上的手機QQ的朋友,應該知道,當QQ啟動時,如果沒有有效網路連接,QQ會提示轉入手機的網路設定介面。這是如何?的呢。
[java] private void checkNetworkInfo()
{
ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
//mobile 3G Data Network
State mobile = conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
txt3G.setText(mobile.toString());
//wifi
State wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
txtWifi.setText(wifi.toString());
//如果3G網路和wifi網路都未串連,且不是處於正在串連狀態 則進入Network Setting介面 由使用者配置網路連接
if(mobile==State.CONNECTED||mobile==State.CONNECTING)
return;
if(wifi==State.CONNECTED||wifi==State.CONNECTING)
return;
startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));//進入無線網路配置介面
//startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); //進入手機中的wifi網路設定介面
}
private void checkNetworkInfo()
{
ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
//mobile 3G Data Network
State mobile = conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
txt3G.setText(mobile.toString());
//wifi
State wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
txtWifi.setText(wifi.toString());
//如果3G網路和wifi網路都未串連,且不是處於正在串連狀態 則進入Network Setting介面 由使用者配置網路連接
if(mobile==State.CONNECTED||mobile==State.CONNECTING)
return;
if(wifi==State.CONNECTED||wifi==State.CONNECTING)
return;
startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));//進入無線網路配置介面
//startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); //進入手機中的wifi網路設定介面
}
運行結果(關閉3G及wifi網路連接的狀態下),程式轉入無線網路配置介面
[java] <SPAN style="FONT-SIZE: 18px"><STRONG>startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));//進入無線網路配置介面</STRONG></SPAN>
startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));//進入無線網路配置介面
如果調用
[java] <SPAN style="FONT-SIZE: 18px"><STRONG>startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); //直接進入手機中的wifi網路設定介面</STRONG></SPAN>
startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); //直接進入手機中的wifi網路設定介面
則直接進入手機中的wifi網路設定介面
在wifi網路連接後 運行該程式
我們可以看到 wi-fi 狀態為已串連(CONNECTED).