//????判斷是否有網(wǎng)絡連接
創(chuàng)新互聯(lián)公司是一家專業(yè)提供洮南企業(yè)網(wǎng)站建設,專注與成都網(wǎng)站制作、成都網(wǎng)站設計、html5、小程序制作等業(yè)務。10年已為洮南眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設計公司優(yōu)惠進行中。
public?static?boolean?isNetworkConnected(Context?context)?{
if?(context?!=?null)?{
ConnectivityManager?mConnectivityManager?=?(ConnectivityManager)?context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo?mNetworkInfo?=?mConnectivityManager.getActiveNetworkInfo();
if?(mNetworkInfo?!=?null)?{
return?mNetworkInfo.isAvailable();
}
}
return?false;
}
//????判斷WIFI網(wǎng)絡是否可用
public?static?boolean?isWifiConnected(Context?context)?{
if?(context?!=?null)?{
ConnectivityManager?mConnectivityManager?=?(ConnectivityManager)?context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo?mWiFiNetworkInfo?=?mConnectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if?(mWiFiNetworkInfo?!=?null)?{
return?mWiFiNetworkInfo.isAvailable();
}
}
return?false;
}
//????判斷MOBILE網(wǎng)絡是否可用
public?static?boolean?isMobileConnected(Context?context)?{
if?(context?!=?null)?{
ConnectivityManager?mConnectivityManager?=?(ConnectivityManager)?context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo?mMobileNetworkInfo?=?mConnectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if?(mMobileNetworkInfo?!=?null)?{
return?mMobileNetworkInfo.isAvailable();
}
}
return?false;
}
//????獲取當前網(wǎng)絡連接的類型信息
public?static?int?getConnectedType(Context?context)?{
if?(context?!=?null)?{
ConnectivityManager?mConnectivityManager?=?(ConnectivityManager)?context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo?mNetworkInfo?=?mConnectivityManager.getActiveNetworkInfo();
if?(mNetworkInfo?!=?null??mNetworkInfo.isAvailable())?{
return?mNetworkInfo.getType();
}
}
return?-1;
}
Scoket?判定是否連接網(wǎng)絡不僅需要使用isClose方法進行判定,同時需要使用isConnected方法來判斷Socket對象 是否連接成功。
1) isConnected方法所判斷的并不是Socket對象的當前連接狀態(tài),?而是Socket對象是否曾經(jīng)連接成功過,如果成功連接過,即使現(xiàn)在isClose返回true,?isConnected仍然返回true。因此,要判斷當前的Socket對象是否處于連接狀態(tài),?必須同時使用isClose和isConnected方法,?即只有當isClose返回false,isConnected返回true的時候Socket對象才處于連接狀態(tài)。
1) 在大多數(shù)的時候可以直接使用Socket類或輸入輸出流的close方法關閉網(wǎng)絡連接,但有時我們只希望關閉OutputStream或InputStream,而在關閉輸入輸出流的同時,并不關閉網(wǎng)絡連接。這就需要用到Socket類的另外兩個方法:shutdownInput和shutdownOutput,這兩個方法只關閉相應的輸入、輸出流,而它們并沒有同時關閉網(wǎng)絡連接的功能。和isClosed、isConnected方法一樣,Socket類也提供了兩個方法來判斷Socket對象的輸入、輸出流是否被關閉,這兩個方法是isInputShutdown()和isOutputShutdown()。?shutdownInput和shutdownOutput并不影響Socket對象的狀態(tài)。
獲取android系統(tǒng)的連接服務可判斷網(wǎng)絡連接狀態(tài),代碼如下
public class NetUtils{
public static boolean isNetworkConnected(Context context){
ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] infos = cm.getAllNetworkInfo();
for(NetworkInfo info:infos){
if(info.isAvailable()info.isConnected()){
return true;
}
}
return false;
}
}
NetworkInfo的isAvailable()和isConnected()有以下5種狀態(tài):
在WLAN設置界面
1,顯示連接已保存,但標題欄沒有,即沒有實質(zhì)連接上:isConnected()==false,isAvailable()=true
2,顯示連接已保存,標題欄也有已連接上的圖標:isConnected()==true,isAvailable()=true
3,選擇不保存后:isConnected()==false,isAvailable()=true
4,選擇連接,在正在獲取IP地址時:isConnected()==false,isAvailable()=false
5,連接上后:isConnected()==true,isAvailable()=true
權限:
uses-permission?android:name="android.permission.ACCESS_NETWORK_STATE"/??
uses-permission?android:name="android.permission.INTERNET"/?
uses-permission?android:name="android.permission.ACCESS_WIFI_STATE"?/
代碼:
/*??
*?判斷網(wǎng)絡連接是否已開??
*true?已打開??false?未打開??
**/
public?static?boolean?isConn(Context?context){
boolean?bisConnFlag=false;
ConnectivityManager?conManager?=?(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo?network?=?conManager.getActiveNetworkInfo();
if(network!=null){
bisConnFlag=conManager.getActiveNetworkInfo().isAvailable();
}
return?bisConnFlag;
}?
/*沒有網(wǎng)絡跳轉(zhuǎn)到網(wǎng)絡設置頁面
*?打開設置網(wǎng)絡界面??
*?*/
public?static?void?setNetworkMethod(final?Context?context){
//提示對話框??
AlertDialog.Builder?builder=new?AlertDialog.Builder(context);
builder.setTitle("網(wǎng)絡設置提示").setMessage("網(wǎng)絡連接不可用,是否進行設置?").setPositiveButton("設置",?new?DialogInterface.OnClickListener()?{
@Override
public?void?onClick(DialogInterface?dialog,?int?which)?{
//?TODO?Auto-generated?method?stub??
Intent?intent=null;
//判斷手機系統(tǒng)的版本??即API大于10?就是3.0或以上版本??
if(Build.VERSION.SDK_INT10){
intent?=?new?Intent(Settings.ACTION_WIRELESS_SETTINGS);
}else{
intent?=?new?Intent();
ComponentName?component?=?new?ComponentName("com.android.settings","com.android.settings.WirelessSettings");
intent.setComponent(component);
intent.setAction("android.intent.action.VIEW");
}
context.startActivity(intent);
}
}).setNegativeButton("取消",?new?DialogInterface.OnClickListener()?{
@Override
public?void?onClick(DialogInterface?dialog,?int?which)?{
//?TODO?Auto-generated?method?stub??
dialog.dismiss();
}
}).show();
}
實現(xiàn)步驟:
下面解決辦法來自于android學習手冊,android學習手冊包含9個章節(jié),108個例子,源碼文檔隨便看,例子都是可交互,可運行,源碼采用android studio目錄結(jié)構,高亮顯示代碼,文檔都采用文檔結(jié)構圖顯示,可以快速定位。360手機助手中下載。排到第三個。
1、獲取ConnectivityManager對象
Context context = activity.getApplicationContext();
// 獲取手機所有連接管理對象(包括對wi-fi,net等連接的管理)
ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
2、獲取NetworkInfo對象
// 獲取NetworkInfo對象
NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();
3、判斷當前網(wǎng)絡狀態(tài)是否為連接狀態(tài)
if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED)
{
return true;
}
4、在AndroidManifest.xml中添加訪問當前網(wǎng)絡狀態(tài)權限
uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/uses-permission
代碼如下:
public class ClassTestDemoActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if (isNetworkAvailable(ClassTestDemoActivity.this))
{
Toast.makeText(getApplicationContext(), "當前有可用網(wǎng)絡!", Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(getApplicationContext(), "當前沒有可用網(wǎng)絡!", Toast.LENGTH_LONG).show();
}
}
/**
* 檢查當前網(wǎng)絡是否可用
*
* @param context
* @return
*/
public boolean isNetworkAvailable(Activity activity)
{
Context context = activity.getApplicationContext();
// 獲取手機所有連接管理對象(包括對wi-fi,net等連接的管理)
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager == null)
{
return false;
}
else
{
// 獲取NetworkInfo對象
NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();
if (networkInfo != null networkInfo.length 0)
{
for (int i = 0; i networkInfo.length; i++)
{
System.out.println(i + "===狀態(tài)===" + networkInfo[i].getState());
System.out.println(i + "===類型===" + networkInfo[i].getTypeName());
// 判斷當前網(wǎng)絡狀態(tài)是否為連接狀態(tài)
if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED)
{
return true;
}
}
}
}
return false;
}
}