在我在模拟器上测试的应用程序中,我使用以下代码检查网络连接(WIFI):
public boolean isOnline() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}
此方法始终返回true
,即使我禁用了计算机的无线连接...
这是由模拟器引起的还是别的什么?
如果这不是检查网络连接的正确方法,我该怎么办?
答案 0 :(得分:36)
最好(1)传入上下文,以便每个活动都可以调用这个函数,以及(2)使这个函数保持静态:
public boolean isNetworkOnline() {
boolean status=false;
try{
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getNetworkInfo(0);
if (netInfo != null && netInfo.getState()==NetworkInfo.State.CONNECTED) {
status= true;
}else {
netInfo = cm.getNetworkInfo(1);
if(netInfo!=null && netInfo.getState()==NetworkInfo.State.CONNECTED)
status= true;
}
}catch(Exception e){
e.printStackTrace();
return false;
}
return status;
}
答案 1 :(得分:7)
要使getActiveNetworkInfo()正常工作,您需要将以下内容添加到清单中。
1. uses-permission android:name="android.permission.INTERNET"
2. uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"
最好使用netInfo.isConnected()而不是netInfo.isConnectedOrConnecting
并尝试此
Context.getSystemService(Context.CONNECTIVITY_SERVICE).getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
或
Context.getSystemService(Context.CONNECTIVITY_SERVICE).requestRouteToHost(TYPE_WIFI, int hostAddress)
答案 2 :(得分:2)
我们可以使用以下功能检查互联网连接状态。
谷歌Android已更新Android API的功能,以检查网络状态。现在在Android最新API中,getAllNetworkInfo()
已被弃用。但getAllNetworks()
函数仅允许Build.VERSION.SDK_INT >= 21.I
为所有情况编写代码。
要检查互联网连接,您可以调用此功能。
public static boolean checkInternetConnection(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
return false;
} else if(Build.VERSION.SDK_INT >= 21){
Network[] info = connectivity.getAllNetworks();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i] != null && connectivity.getNetworkInfo(info[i]).isConnected()) {
return true;
}
}
}
} else {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
final NetworkInfo activeNetwork = connectivity.getActiveNetworkInfo();
if (activeNetwork != null && activeNetwork.isConnected()) {
return true;
}
}
return false;
}
答案 3 :(得分:0)
在我的情况下,我关闭了Wifi,但忘了关闭数据/移动网络连接。一旦我这样做了,这个帖子的原始帖子中的代码对我有效。
回顾一下:
答案 4 :(得分:0)
使用following class,已更新为最新发布的API:29。
var spawn = require("child_process").spawn,child;
child = spawn("powershell.exe",["c:\\temp\\helloworld.ps1"]);
child.stdout.on("data",function(data){
console.log("Powershell Data: " + data);
});
child.stderr.on("data",function(data){
console.log("Powershell Errors: " + data);
});
child.on("exit",function(){
console.log("Powershell Script finished");
});
child.stdin.end(); //end input
答案 5 :(得分:-1)
这就是我把它放在一个项目中的方式:
清单文件:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
静态功能:
public static boolean isNwConnected(Context context) {
if (context == null) {
return true;
}
ConnectivityManager connectivityManager =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo nwInfo = connectivityManager.getActiveNetworkInfo();
if (nwInfo != null && nwInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}