如何检查android设备是否可以访问互联网?
我正在使用以下方法检查设备是否可以访问internet。如何检查android设备是否可以访问互联网?,android,Android,我正在使用以下方法检查设备是否可以访问internet。 在这段代码中,我试图ping/request到www.google.com try { HttpGet request = new HttpGet(new URI(WEB_SIT_TO_PING)); HttpParams httpParameters = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParamete
在这段代码中,我试图ping/request到
www.google.com
try
{
HttpGet request = new HttpGet(new URI(WEB_SIT_TO_PING));
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 500);
HttpConnectionParams.setSoTimeout(httpParameters, 500);
HttpClient httpClient = new DefaultHttpClient(httpParameters);
HttpResponse response = httpClient.execute(request);
int status = response.getStatusLine().getStatusCode();
if (status == HttpStatus.SC_OK)
{
result = true;
}
}
catch(Exception e)
{
e.printStackTrace();
result = false;
}
上面的代码可以工作,但当我的活动启动时,它会显示一个空白黑屏1-2秒,然后显示活动的主屏幕
我正在活动的onCreate
中执行此检查。做这项检查还有其他原因吗 更新:
我不想检查网络是否连接,我想检查设备是否可以访问互联网。可能是设备具有网络连接,但该网络连接不具有Internet访问权限
谢谢。您可以检查该设备是否足够容易地连接到网络,或者您是否真的想查看该设备是否可以专门连接到Google,而无需延迟将该代码包装到异步任务中 有关异步任务的信息: AsyncTask将允许您在与UI线程不同的线程上运行代码。由于这个原因,目前它冻结了1-2秒
编辑我没有提供检查无线连接的代码,因为其他人已经提供了其他替代方案,但我确实认为有必要解释一下为什么你要经历这样的冻结。你可以检查设备是否足够容易地连接到网络,或者你是否真的想看看设备是否可以专门连接到Google,无需延迟即可将代码包装到异步任务中 有关异步任务的信息: AsyncTask将允许您在与UI线程不同的线程上运行代码。由于这个原因,目前它冻结了1-2秒
编辑我没有提供检查无线连接的代码,因为其他人已经提供了其他替代方案,但我确实认为有必要解释一下为什么您要经历这种冻结。您可以使用以下代码来确定设备是否可以访问internet:
boolean connected = false;
ConnectivityManager connectivitymanager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkinfo = connectivitymanager.getActiveNetworkInfo();
connected = ((networkinfo != null) && (networkinfo.isAvailable()) && (networkinfo
.isConnected()));
Log.v("Message ", connected + "");
if (connected == false) {
Toast.makeText(currentActivity.this,
"No Internet Connection detected on device",
Toast.LENGTH_LONG).show();
finish();
} else {
//
}
您可以使用以下代码确定设备是否可以访问internet:
boolean connected = false;
ConnectivityManager connectivitymanager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkinfo = connectivitymanager.getActiveNetworkInfo();
connected = ((networkinfo != null) && (networkinfo.isAvailable()) && (networkinfo
.isConnected()));
Log.v("Message ", connected + "");
if (connected == false) {
Toast.makeText(currentActivity.this,
"No Internet Connection detected on device",
Toast.LENGTH_LONG).show();
finish();
} else {
//
}
在我自己的应用程序中,我使用以下代码:
public boolean isOnline() {
ConnectivityManager cm = (ConnectivityManager) 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" />
在我自己的应用程序中,我使用以下代码:
public boolean isOnline() {
ConnectivityManager cm = (ConnectivityManager) 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" />
我认为以下代码有助于检查网络连接:
/*
*@return boolean return true if the application can access the internet
*/
public boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
/*
*@返回布尔值如果应用程序可以访问internet,则返回true
*/
公共布尔值isNetworkAvailable(上下文){
ConnectivityManager connectivity=(ConnectivityManager)context.getSystemService(context.connectivity\u SERVICE);
if(连接性!=null){
NetworkInfo[]info=connectivity.getAllNetworkInfo();
如果(信息!=null){
对于(int i=0;i
我认为以下代码有助于检查网络连接:
/*
*@return boolean return true if the application can access the internet
*/
public boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
/*
*@返回布尔值如果应用程序可以访问internet,则返回true
*/
公共布尔值isNetworkAvailable(上下文){
ConnectivityManager connectivity=(ConnectivityManager)context.getSystemService(context.connectivity\u SERVICE);
if(连接性!=null){
NetworkInfo[]info=connectivity.getAllNetworkInfo();
如果(信息!=null){
对于(int i=0;i
您面临的1-2秒冻结是由于您在onCreate方法中发出的http请求造成的。在onCreate方法完成执行之前,屏幕的UI不会显示。如果仍然希望在onCreate方法中发出http请求,则可以在单独的线程中发出。可以创建一个异步任务或一个新线程,以满足您的需要
永远记住,不要在android的UI线程中执行耗时的任务。在这里,您正在UI线程中发出http请求。到目前为止,您只经历了1-2秒的延迟,如果您在android设备连接到WIFI网络时尝试相同的操作,但互联网速度非常慢,那么您的http请求可能需要5秒才能完成,如果您尝试在这5秒内执行任何UI操作,您的应用程序将显示“应用程序无响应”对话框。您面临的1-2秒冻结是由于您在onCreate方法中发出的http请求造成的。在onCreate方法完成执行之前,屏幕的UI不会显示。如果仍然希望在onCreate方法中发出http请求,则可以在单独的线程中发出。可以创建一个异步任务或一个新线程,以满足您的需要 永远记住,不要在android的UI线程中执行耗时的任务。在这里,您正在UI线程中发出http请求。到目前为止,您只经历了1-2秒的延迟,如果您在android设备连接到WIFI网络时尝试相同的操作,但internet非常慢,那么您的http请求可能需要5秒才能完成,如果您尝试在这5秒钟内执行任何UI操作,您的应用程序