首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android 判断网络连接的有关问题

2013-03-06 
android 判断网络连接的问题我的项目中要用到网络连接,可是我用了下面两种方式都无法判断,明明我把网线拔

android 判断网络连接的问题
我的项目中要用到网络连接,可是我用了下面两种方式都无法判断,明明我把网线拔了还是告诉我网络已经连接,权限也给了,请问是哪个地方写错了吗?我就差这个了,有回复马上结贴。谢谢了!
第一种方法


public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.main);

final TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
mTelephonyMgr.listen(new PhoneStateListener() {
@Override
public void onDataConnectionStateChanged(int state) {
switch (state) {
case TelephonyManager.DATA_DISCONNECTED:// 网络断开
Toast.makeText(MyGongxf.this, "您暂时没有可用的网络,请检查网络",
Toast.LENGTH_SHORT).show();
break;
case TelephonyManager.DATA_CONNECTING:// 网络正在连接
break;
case TelephonyManager.DATA_CONNECTED:// 网络连接上
Toast.makeText(MyGongxf.this, "网络连接上",
Toast.LENGTH_SHORT).show();
break;
}
}
}, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);

}

第二种方法


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.main);
boolean b = isConnectInternet();
if (!b) {
Toast.makeText(MyGongxf.this, "您暂时没有可用的网络,请检查网络",
Toast.LENGTH_SHORT).show();
}
}


public boolean isConnectInternet() {
boolean netSataus = false;
ConnectivityManager conManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = conManager.getActiveNetworkInfo();
if (networkInfo != null) { // 注意,这个判断一定要的哦,要不然会出错
netSataus = networkInfo.isAvailable();

}
return netSataus;
}

[解决办法]
第二种方法你权限对么?
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
我试过第二种,在我G7上可以判断。
[解决办法]
用我这个方法
public static  NetworkInfo getAvailableNetWorkInfo(Context context) {
    if(context == null){
   return null;
    }

        ConnectivityManager connectivityManager = (ConnectivityManager)context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
        if (activeNetInfo != null && activeNetInfo.isAvailable()) {
            return activeNetInfo;
        }else{
            return null;
        }
    }

然后去看NetInfo对象的内容
[解决办法]
3楼的代码中不是有了么,改一下。
if (activeNetInfo != null && activeNetInfo.isAvailable()) {


    return true;
}else{
    return false;
}
这样做是没有问题的。只有点小问题,虽然网络显示是通的,但有可能无法真正连接internet,它也会返回true。
如果有可能的话,你用真机试试。
[解决办法]

引用:
3楼的代码中不是有了么,改一下。
----加一个
if (activeNetInfo != null &amp;&amp; activeNetInfo.isAvailable() && activeNetInfo.isConnected()) {
    return true;
}else{
    return false;
}
这样做是没有问题的。只有点小问题,虽然网络显示是通的,但有可能无法真正连接internet,它也会返回true。
如果有可能的……

热点排行