我需要检测 Android 设备是否已连接到 Internet。
NetworkInfo
类提供了一个听起来很完美isAvailable()
问题是:
NetworkInfo ni = new NetworkInfo();
if (!ni.isAvailable()) {
// do something
}
抛出此错误:
The constructor NetworkInfo is not visible.
可以肯定的是,还有另一个类返回NetworkInfo
对象。但是我不知道是哪一个。
ConnectivityManager 的getActiveNetworkInfo()
方法返回一个NetworkInfo
实例,该实例表示它可以找到的第一个连接的网络接口;如果没有ConnectivityManager
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" />
在您的 Android 清单中。
编辑:
请注意,拥有活动的网络接口并不能保证特定的网络服务可用。网络问题,服务器停机,信号不足,门户网站被俘,内容过滤器等都可能阻止您的应用到达服务器。例如,在您收到来自 Twitter 服务的有效回复之前,您无法确定您的应用程序是否可以访问 Twitter。
我按以下方式检查 Wi-fi 和移动互联网...
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;
}
显然,可以很容易地对其进行修改以检查单个特定的连接类型,例如,如果您的应用需要可能更高的 Wi-fi 速度才能正常工作等。
步骤 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!!!!");
}