检测是否存在是一个互联网连接在[重复]
-
26-09-2019 - |
题
我需要检测是否卓装置被连接到互联网。
的 NetworkInfo
类提供了一个非静态的方法 isAvailable()
这听起来很完美。
问题是:
NetworkInfo ni = new NetworkInfo();
if (!ni.isAvailable()) {
// do something
}
抛出这个错误:
The constructor NetworkInfo is not visible.
安全的打赌是那是另一类,返回一个 NetworkInfo
对象。但我不知道。
- 如何获得上述段代码的工作?
- 怎么可能我们发现自我所需要的信息在线文件?
- 你可以建议一种更好的方式为这种类型的检测?
解决方案
的 getActiveNetworkInfo()
方法 ConnectivityManager
返回 NetworkInfo
实例代表第一次连接的网络接口,它可以找到或 null
如果没有一个界面连接。检查,如果这种方法返回 null
应该足够告诉我们,如果一个互联网连接是否可用。
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
你也会需要:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
在你的安卓清单。
编辑:
注意具有一个活跃的网络接口并不能保证一个特别的网络化服务。网络的问题、服务器停机,低信、专门户、内容过滤器等都可以阻止你的程序达成一个服务器。例如你不能告诉肯定如果您应用程序,可以达到Twitter,直到收到一个有效的响应,从Twitter的服务。
其他提示
我检查这两个无线网络和移动互联网如下...
private boolean haveNetworkConnection() {
boolean haveConnectedWifi = false;
boolean haveConnectedMobile = false;
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] netInfo = cm.getAllNetworkInfo();
for (NetworkInfo ni : netInfo) {
if (ni.getTypeName().equalsIgnoreCase("WIFI"))
if (ni.isConnected())
haveConnectedWifi = true;
if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
if (ni.isConnected())
haveConnectedMobile = true;
}
return haveConnectedWifi || haveConnectedMobile;
}
显然,它可以很容易地加以修改以检查各个具体连接类型,例如,如果应用需要可能较高速度下的无线网络连接正常工作等。
步骤1:创建一个类AppStatus在项目(你可以给任何其他名称也同样)。然后请贴给出下条线进入你的代码:
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
public class AppStatus {
private static AppStatus instance = new AppStatus();
static Context context;
ConnectivityManager connectivityManager;
NetworkInfo wifiInfo, mobileInfo;
boolean connected = false;
public static AppStatus getInstance(Context ctx) {
context = ctx.getApplicationContext();
return instance;
}
public boolean isOnline() {
try {
connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
connected = networkInfo != null && networkInfo.isAvailable() &&
networkInfo.isConnected();
return connected;
} catch (Exception e) {
System.out.println("CheckConnectivity Exception: " + e.getMessage());
Log.v("connectivity", e.toString());
}
return connected;
}
}
步骤2:现在要检查你的装置具有网络连接,然后只是添加这段代码在任何你想要检查...
if (AppStatus.getInstance(this).isOnline()) {
Toast.makeText(this,"You are online!!!!",8000).show();
} else {
Toast.makeText(this,"You are not online!!!!",8000).show();
Log.v("Home", "############################You are not online!!!!");
}
还有另一个重要的注意。你必须设置 android.permission.ACCESS_NETWORK_STATE
在你AndroidManifest.xml 这个工作。
_怎么可能我们发现自我所需要的信息在线文件?
你只需要阅读该文件的类的适当足够和你会发现所有的答案你所寻找的。检查了文档 ConnectivityManager.说明告诉你该怎么做。
该getActiveNetworkInfo()方法的ConnectivityManager返回 NetworkInfo实例代表第一连接网络 接口,它可以找到或空,如果没有,如果该接口的连接。检查,如果这种方法返回null应该足够告诉我们,如果一个 互联网连接。
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;
}
你也会需要:
在你 安卓清单。
编辑:
注意具有一个活跃的网络接口并不能保证一个 尤其是网络服务。网络的问题、服务器 停机时间,低信、专门户、内容过滤器等 都可以阻止你的程序达成一个服务器。例如你 不能告诉肯定如果您应用程序,可以达到Twitter,直到收到 有效的响应,从Twitter的服务。
getActiveNetworkInfo()不应该永远不会得到空。我不知道他们想当他们来到了这一点。它应该给你一个目的始终。
可能我们发现自己:
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();