在 android 节目中检查互联网连接
checking internet connection on android programming
我尝试编写一个 android 程序来使用两种不同的方法检查互联网连接。第一个是最常见的方法,CheckInternetConnection(),第二个方法是通过连接到网站,ConnectGoogleTest()。
第一个完美运行,但在第二个中我的平板电脑挂了!有人知道为什么吗?
代码是:
public class myITClass {
private Context ctx ;
public myITClass(Context context){
this.ctx = context;
}
public boolean CheckInternetConnection() {
ConnectivityManager cm = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
//NetworkInfo ni = cm.getActiveNetworkInfo();
if (cm.getActiveNetworkInfo() == null) {
// There are no active networks.
return false;
} else {
return true;
}
}
public boolean googlePingTest(){
boolean res = false ;
try {
URL url = new URL("http://www.google.com/");
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setConnectTimeout(15000);
urlc.connect();
if (urlc.getResponseCode() == 200) { res = true; }
} catch (MalformedURLException e1) {
res = false;
} catch (IOException e) {
res = false ;
}catch (Exception e){
res = false ;
}
return res;
}
}
第二种方法在主线程上同步调用网络,并阻塞 UI。尝试为此使用 AsyncTask。
您可以通过 HttpURLConnection
向 http://www.google.com/
发送 ping。请确保您在后台线程中执行此操作。创建网络任务必须在后台运行。有 3 个选项可以做到这一点:
- 使用
AsyncTask
- 使用
IntentService
- 使用
Service
这次我们将使用AsyncTask
。所以在你的 Activity
:
中创建一个私有的 class
private boolean res = false;
private class PingTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... urlSite) {
HttpURLConnection urlc = null;
try {
URL url = new URL("http://www.google.com/");
urlc = (HttpURLConnection) url.openConnection();
urlc.setConnectTimeout(15000);
urlc.setRequestMethod("GET");
urlc.connect();
if (urlc.getResponseCode() == 200) { res = true; }
} catch (MalformedURLException e1) {
res = false;
} catch (IOException e) {
res = false ;
}catch (Exception e){
res = false ;
}finally{
if (urlc != null) {
try{
// close the connection
urlc.disconnect();
}catch (Exception e){
e.printStackTrace();
}
}
}
return null;
}
}
不要忘记在您的 class:
中添加此字段
private boolean res = false;
创建获取状态的方法:
public boolean getStatus(){
return status;
}
如何使用?
先执行PingTask
检查状态:
PingTask ping = new PingTask();
ping.execute();
获取状态:
// if the connection is available
if(getStatus()==true){
// do your thing here.
}
我尝试编写一个 android 程序来使用两种不同的方法检查互联网连接。第一个是最常见的方法,CheckInternetConnection(),第二个方法是通过连接到网站,ConnectGoogleTest()。 第一个完美运行,但在第二个中我的平板电脑挂了!有人知道为什么吗?
代码是:
public class myITClass {
private Context ctx ;
public myITClass(Context context){
this.ctx = context;
}
public boolean CheckInternetConnection() {
ConnectivityManager cm = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
//NetworkInfo ni = cm.getActiveNetworkInfo();
if (cm.getActiveNetworkInfo() == null) {
// There are no active networks.
return false;
} else {
return true;
}
}
public boolean googlePingTest(){
boolean res = false ;
try {
URL url = new URL("http://www.google.com/");
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setConnectTimeout(15000);
urlc.connect();
if (urlc.getResponseCode() == 200) { res = true; }
} catch (MalformedURLException e1) {
res = false;
} catch (IOException e) {
res = false ;
}catch (Exception e){
res = false ;
}
return res;
}
}
第二种方法在主线程上同步调用网络,并阻塞 UI。尝试为此使用 AsyncTask。
您可以通过 HttpURLConnection
向 http://www.google.com/
发送 ping。请确保您在后台线程中执行此操作。创建网络任务必须在后台运行。有 3 个选项可以做到这一点:
- 使用
AsyncTask
- 使用
IntentService
- 使用
Service
这次我们将使用AsyncTask
。所以在你的 Activity
:
private boolean res = false;
private class PingTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... urlSite) {
HttpURLConnection urlc = null;
try {
URL url = new URL("http://www.google.com/");
urlc = (HttpURLConnection) url.openConnection();
urlc.setConnectTimeout(15000);
urlc.setRequestMethod("GET");
urlc.connect();
if (urlc.getResponseCode() == 200) { res = true; }
} catch (MalformedURLException e1) {
res = false;
} catch (IOException e) {
res = false ;
}catch (Exception e){
res = false ;
}finally{
if (urlc != null) {
try{
// close the connection
urlc.disconnect();
}catch (Exception e){
e.printStackTrace();
}
}
}
return null;
}
}
不要忘记在您的 class:
中添加此字段private boolean res = false;
创建获取状态的方法:
public boolean getStatus(){
return status;
}
如何使用?
先执行PingTask
检查状态:
PingTask ping = new PingTask();
ping.execute();
获取状态:
// if the connection is available
if(getStatus()==true){
// do your thing here.
}