如何在Android上查看我的互联网访问?

时间:2011-03-28 12:56:08

标签: android

我真正想要的是,当用户没有连接时,我想显示一些他或她没有连接的对话框。

我试图把它放在我的MainActivity上,但仍然没有用。

public boolean isOnline() {
 ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
 return cm.getActiveNetworkInfo().isConnectedOrConnecting();

}

我也使用了这个,但它也不起作用:

public class ConnectionChangeReceiver extends BroadcastReceiver
    {
      @Override
      public void onReceive( Context context, Intent intent )
      {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService( Context.CONNECTIVITY_SERVICE );
        NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
        NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo(     ConnectivityManager.TYPE_MOBILE );
        if ( activeNetInfo != null )
        {
          Toast.makeText( context, "Active Network Type : " + activeNetInfo.getTypeName(), Toast.LENGTH_SHORT ).show();
        }
        if( mobNetInfo != null )
        {
          Toast.makeText( context, "Mobile Network Type : " + mobNetInfo.getTypeName(), Toast.LENGTH_SHORT ).show();
        }
      }
    }

我在清单上添加了这个:

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

有人能告诉我我做错了什么,我会非常感激。提前谢谢!

5 个答案:

答案 0 :(得分:2)

    public static boolean haveInternet(Context ctx) {
         NetworkInfo info = (NetworkInfo) ((ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
         if (info == null || !info.isConnected()) {
            return false;
         }
         return true;
    }

如果布尔方法返回true,那么如果为false No Connection则存在Internet连接..

if(haveInternet(ActivityName.this)==true){
   //Some code
}else{
   Toast.makeText(ActivityName.this,"No Internet Connection",      Toast.LENGTH_SHORT).show();  
 }

另请参阅此内容以获取进一步的帮助.. Internet Connection ...

答案 1 :(得分:2)

也许此链接可以为您提供更多帮助:Broadcastreceiver to obtain ServiceState information

您可以通过活动中的精简CommunicationManager代码,或者更好,如果您需要从更多活动访问,您还可以在Application Singletin实例中将该类声明为静态,并按照here所述从那里调用它

您还需要在应用程序清单中注册BroadcastReceiver:

<receiver android:enabled="true" android:name="com.project.mobile.controller.comm.ConnectivityReceiver">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
    </intent-filter>
</receiver>

享受

答案 2 :(得分:1)

只需使用此方法

private boolean isNetworkConnected(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo network = cm.getActiveNetworkInfo();
        if (network != null) {
            return network.isAvailable();
        }
        return false;
    }

答案 3 :(得分:0)

您可以在ConnectivityManager类的帮助下检查您的内部连接。 我给了一个你可以在代码中使用的函数。

 public static boolean
 CheckInternet(Context context)      {
         ConnectivityManager connec =(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

        android.net.NetworkInfo wifi = > connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

        android.net.NetworkInfo mobile =connec.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

此处如果可以获得wifi和移动网络的状态检查 或不。如果其中任何一个可用或连接,那么它将 返回true,否则为false;

 if (wifi.isConnected()) {          
return true;        
} else if
 (!mobile.isConnected()) 
{           
return false;       
} else if
 (mobile.isConnected())
 {          
return true;        
} return false;
}

使用此功能后你需要2只检查条件

 if (CheckInternet(getBaseContext())) 
 {   
 //connection successfull 

 }  else 

{ Toast.makeText(getBaseContext(),"Please Check InternetConnectionToast.LENGTH_LONG).show(); 
}

享受

答案 4 :(得分:0)

当您连接到Wi-Fi源或通过手机数据包时,上述方法可以正常工作。但是在Wi-Fi连接的情况下,有些情况下您会被要求在Cafe中登录。因此,在这种情况下,当您连接到Wi-Fi源而不是Internet时,您的应用程序将会失败。

此方法正常。

public static boolean isConnected(Context context) {
    ConnectivityManager cm = (ConnectivityManager)context
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (activeNetwork != null && activeNetwork.isConnected()) {
        try {
            URL url = new URL("http://www.google.com/");
            HttpURLConnection urlc = (HttpURLConnection)url.openConnection();
            urlc.setRequestProperty("User-Agent", "test");
            urlc.setRequestProperty("Connection", "close");
            urlc.setConnectTimeout(1000); // mTimeout is in seconds
            urlc.connect();
            if (urlc.getResponseCode() == 200) {
                return true;
            } else {
                return false;
            }
        } catch (IOException e) {
            Log.i("warning", "Error checking internet connection", e);
            return false;
        }
    }

    return false;

}

请在主线程的单独线程中使用它,因为它进行网络调用,如果不跟随,将抛出NetwrokOnMainThreadException。