安卓中的网络连接检查

4

我尝试检查网络是否可用。但是在我的模拟器上,它总是显示connected(即使断开互联网连接)。

我的代码有什么错误吗?我正在连接wifi

代码:

public class AndroidConnectivityActivity extends Activity
{
Button checkBtn;

/** Called when the activity is first created. */
@Override

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
      checkBtn = (Button) findViewById(R.id.button1);

      checkBtn.setOnClickListener(new View.OnClickListener()
      {
       public void onClick(View v)
       {
        if(isInternetOn())
        {
         Toast.makeText(getBaseContext(), "Connected",
           Toast.LENGTH_SHORT).show();
        }
        else
        {
         Toast.makeText(getBaseContext(), "Not connected",
           Toast.LENGTH_SHORT).show();
        }
       }});
     }

     public final boolean isInternetOn()
     {
      ConnectivityManager connec = (ConnectivityManager) getSystemService
      (Context.CONNECTIVITY_SERVICE);

      if ((connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED)
        ||(connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTING)
        ||(connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING)
        ||(connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED))
      {
       return true;
      }

      else if ((connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED)
        || (connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED))
      {
       return false;
      }

      return false;
     }
    }

尝试在飞行模式下测试您的代码。 - Krishnakant Dalal
只需关闭WiFi或LAN连接。 - H.S
我认为你在清单文件中缺少权限<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.INTERNET"/> - Anu
你在任何设备上测试过它吗? - Anu
这意味着我的代码很好,我可以向我的上级展示它...哈哈 - H.S
显示剩余8条评论
3个回答

2

请使用以下代码

public static boolean isInternetAvailable(Context context)
    {
        boolean isInternetAvailable = false;

        try
        {  
            ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();

            if(networkInfo != null && (networkInfo.isConnected()))
            {
                isInternetAvailable  = true;
            }    
        }
        catch(Exception exception)
        {
            // Do Nothing
        }

        return isInternetAvailable;
    }

请在真实设备上尝试。

在Activity的onCreate方法中使用以下代码:

if(isInternetAvailable(this))
{
Toast toast = Toast.makeText(this, "internet available", Toast.LENGTH_SHORT);
        toast.show();
}
else
{
Toast toast = Toast.makeText(this, "internet not available", Toast.LENGTH_SHORT);
        toast.show();
}

所需清单权限

<uses-permission
        android:name="android.permission.INTERNET" />

    <uses-permission
        android:name="android.permission.ACCESS_NETWORK_STATE" />

你能用我们的代码显示Toast消息吗?这样可以确切地知道发生了什么。 - H.S
请查看编辑后的代码,并不要忘记在清单文件中设置互联网权限。 - Vivek Kumar Srivastava
当然了,伙计。我从不在任何论坛上发布不可用的代码。 - Vivek Kumar Srivastava
如果您正在使用 Windows 机器上的 Eclipse,则按“ctrl+shift”然后按“O”来导入所需的包。 如果您使用其他系统,则需要手动导入所需的包。 - Vivek Kumar Srivastava
请再次添加,查看编辑后的代码,我已经提到所需的权限。 - Vivek Kumar Srivastava
显示剩余7条评论

2
请使用以下方法:
public static boolean isInternetAvailable(Context context) {
            ConnectivityManager cm =
                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo netInfo = cm.getActiveNetworkInfo();
            if (netInfo != null && netInfo.isConnectedOrConnecting()) {
                return true;
            }
            return false;
        }

在清单文件中设置权限,例如:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

0

使用这个:

private boolean getOnlineState() {
        ConnectivityManager myConnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo myNetworkInfo = myConnectivityManager
                .getActiveNetworkInfo();
        if (myNetworkInfo != null
                && myNetworkInfo.isConnectedOrConnecting())
            return true;
        return false;

    }

顺便说一下:

if ((connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED)
    ||(connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTING)
    ||(connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING)
    ||(connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED))
  {
   return true;
  }

  else if ((connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED)
    || (connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED))
  {
   return false;
  }

  return false;
 }

与之相同:

    if ((connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED)
    ||(connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTING)
    ||(connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING)
    ||(connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED))
         return true;
         return false;

你应该在真机上尝试这样的硬件操作,而不是模拟器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接