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

解决方案 »

  1.   

    第二种方法你权限对么?
    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>
    我试过第二种,在我G7上可以判断。
      

  2.   

    用我这个方法
    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.   

    请问我怎么调用呢?不好意思,我对android不熟悉,Context 我应该传什么进去呢?
    能把调用的方法也写出来吗?谢谢了
      

  4.   

    我是下面这样调用的Context   mcontext;
    mcontext=this.getApplicationContext();
    NetworkInfo net= getAvailableNetWorkInfo(mcontext);但是net的内容不管怎样都不是null,应该判断net的什么内容呢?
    谢谢了
      

  5.   

    我是下面这样调用的
    Context   mcontext;
    mcontext=this.getApplicationContext();
    NetworkInfo net= getAvailableNetWorkInfo(mcontext);net的内容不管怎样都不是null,应该判断net的什么内容呢?
    谢谢了
      

  6.   

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

  7.   

    对啊,
    我就是用真机测的,明明打开的网页显示找不到地址,程序却不提示网络异常
    然后用模拟器测试也是,把网线都拔了它还是返回true.
    请问这该怎么办呢?谢谢了!
      

  8.   

    Netinfo我怎么测都不是null啊,在模拟器上测试连网线都拔了它还不为NULL。
    还是正常,我用activeNetInfo.isConnected()和activeNetInfo.isConnectedOrConnecting()方法。这样测试的话在真机上如果人工把移动网络关闭了,它能够测试出来,但是如果网络不好的话应该如何判断呢?比如说在我打开一个网页时间很长了还没有打开,那么就应该可以说现在网络不好,这样就需要提醒用户,可在android上怎么判断呢?
    谢谢了
      

  9.   

    我记得好像有ConnectionChangelistener还是ConnectiveChangeListener查下没错的
      

  10.   

    获取是否为在线模式
    ReaderPreferences.load(mActivity);
    boolean isOffLine = true;
    isOffLine = ReaderPreferences.getLoginMode();
      

  11.   

    最近工作的时候也发现这个问题了,代码写得没问题,但是在拔掉网线后,再判断网络状态,居然返回了一个true,好郁闷啊。
      

  12.   

    NetworkInfo networkInfo = SuningFunctionUtils
                            .getActiveNetwork(LogonActivity.this);
                    if (null != networkInfo && networkInfo.isAvailable())
                    {
                        // 跳转到注册页面
                        Intent intent = new Intent();
                        intent.setAction(SuningTabActivity.GO_REGISTER);
                        sendBroadcast(intent);
                    }
                    else
                    {
                        displayToast(R.string.network_exception);
                    }--------------------------------------------------------------------------------
    public static NetworkInfo getActiveNetwork(Context context)
        {
            if (context == null)
            {
                return null;
            }
            ConnectivityManager mConnMgr = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            if (mConnMgr == null)
            {
                return null;
            }
            NetworkInfo aActiveInfo = mConnMgr.getActiveNetworkInfo();
            // 获取活动网络连接信息
            return aActiveInfo;
        }
    可以检测到无线网络包括wifi 3G等等   
    但是连接网线就检测不到,永远是网络连接OK。我是做机顶盒开发的的  现在一个功能是从登录页面到注册页面,因为注册页面有一个图形校验码(网络获取),所以断网就不让跳到注册页面。各位大牛,怎么检测有线网来连接失败?