1

我想通过代码检查gprs连接在android中是否处于活动状态,以显示如何检查。我有以下代码。它会起作用吗?

public static boolean isOnline(Context context) {
try {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm.getActiveNetworkInfo().isConnectedOrConnecting()) {
URL url = new URL("https://telemeter4tools.services.telenet.be/TelemeterService");
HttpURLConnection urlc = (HttpURLConnection) url
.openConnection();
urlc.setRequestProperty("User-Agent", "My Android Demo");
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) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}

我可以用谷歌替换那个网站并检查响应。

4

5 回答 5

3
Check below code:

public boolean checkNetworkStatus() {

    final ConnectivityManager connMgr = (ConnectivityManager) this
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    final android.net.NetworkInfo wifi = connMgr
            .getNetworkInfo(ConnectivityManager.TYPE_WIFI);

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

    if (wifi.isAvailable()) {
        Toast.makeText(this, "Wifi connection.", Toast.LENGTH_LONG).show();
        return true;

    } else if (mobile.isAvailable()) {
        Toast.makeText(this, "GPRS connection.", Toast.LENGTH_LONG).show();
        return true;

    } else {
        Toast.makeText(this, "No network connection.", Toast.LENGTH_LONG).show();
        return false;
    }       

}
于 2011-10-12T18:51:23.810 回答
1

我可以用谷歌替换那个网站并检查响应。

的,也替换httpshttp不需要点击页面并获得响应。

只做HEAD

HEAD 方法与 GET 相同,只是服务器不能在响应中返回消息体。响应 HEAD 请求的 HTTP 标头中包含的元信息应该与响应 GET 请求发送的信息相同。此方法可用于获取有关请求所隐含的实体的元信息,而无需传输实体主体本身。这种方法通常用于测试超文本链接的有效性、可访问性和最近的修改。

对 HEAD 请求的响应可能是可缓存的,因为响应中包含的信息可以用于从该资源更新先前缓存的实体。如果新字段值表明缓存的实体与当前实体不同(如 Content-Length、Content-MD5、ETag 或 Last-Modified 的变化所表明的那样),则缓存必须将缓存条目视为陈旧的。

public static boolean isGPRSWorking(String URL){
    try {
      HttpURLConnection.setFollowRedirects(false);

      HttpURLConnection con =
         (HttpURLConnection) new URL(URLName).openConnection();
      con.setRequestMethod("HEAD");
      return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
    }
    catch (Exception e) {
       e.printStackTrace();
       return false;
    }
  }  
于 2011-02-17T10:49:11.640 回答
0

如果您正在测试移动连接,您可以查看是否;

NetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE

在您的代码中从 cm.getActiveNetworkInfo() 返回的对象上。如果连接是移动连接,这将返回 true。

专门针对 GPRS 进行测试并没有真正意义,因为并非所有移动设备都支持 GPRS 协议,而且许多移动设备可以使用其他蜂窝协议(CDMA、HSDPA 等)。

于 2011-02-17T10:58:29.090 回答
0

使用这个简单的方法来检查连接性

 public boolean isOnline()
{

     ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
     NetworkInfo ni = cm.getActiveNetworkInfo();
     boolean result = false;
     if(ni != null )
     {
         if(  ni.getState() == NetworkInfo.State.CONNECTED )
         {
             result = true;
         }
     }

     return result;


} 

使用它,我们可以检查连接到设备的任何网络。您可以通过指定额外来专门检查 WIFI 或 GPRS

 ConnectivityManager connec = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
  // ARE WE CONNECTED TO THE NET
if ( connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED ||
    connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED ) 

其中 0 和 1 分别表示移动和 wifi 连接

于 2011-02-17T10:56:18.200 回答
0

getNetworkInfo(ConnectivityManager.TYPE_WIFI)在 API 级别 23 中已弃用

对于 android >= API LEVEL 23 使用:

public boolean isMobileDataNetworkConnected(Context context) {

    ConnectivityManager connectivityManager = (ConnectivityManager) 
            context.getSystemService(Context.CONNECTIVITY_SERVICE);

    for (Network network : connectivityManager.getAllNetworks()) {
        NetworkInfo networkInfo = connectivityManager.getNetworkInfo(network);

        int networkType = networkInfo.getType();

        if (networkType == ConnectivityManager.TYPE_MOBILE || 
            networkType == ConnectivityManager.TYPE_MOBILE_DUN &&
            networkInfo.isConnected()) {

            return true;
        }
    }
    return false;
}
于 2018-03-28T11:44:53.337 回答