从NetworkInfo.isConnectedOrConnecting()
调用Service
时遇到false
的奇怪行为。它只是返回public boolean isOnline() {
if (mContext == null) {
return false;
}
NetworkInfo netInfo = mConnectivityManager.getActiveNetworkInfo();
return netInfo != null && netInfo.isConnectedOrConnecting();
}
,尽管手机已连接到网络。从“活动”和“片段”中,此片段按预期工作。
emailable-report.html
有人遇到过这个问题吗?也许还有另一种检查服务中网络连接的方法。
答案 0 :(得分:1)
在服务类中尝试这样的事情。
public boolean isOnline(Context context) {
ConnectivityManager manager = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (manager == null) {
return false;
}
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
if (networkInfo != null){
if (networkInfo.isConnectedOrConnecting()) {
return true;
}
}
return false;
}
修改:使用上下文单例:
public class ServiceContextManager {
private static ServiceContextManager instance;
public static ServiceContextManager getInstance(Context context) {
if (instance == null) {
instance = new ServiceContextManager(context.getApplicationContext());
}
return instance;
}
private Context mContext;
private ServiceContextManager(Context context) {
mContext = context;
}
}
答案 1 :(得分:1)
我使用的是确切的代码,直到昨天我发现更好的东西时才遇到同样的问题。它可能看起来不一样,但这确实很有效,因为它还检查是否有工作的互联网连接,因为isNetworkConnected()
将返回true,如果连接的wifi没有互联网,所以你可以使用这个代码。
public boolean isOnline() throws InterruptedException, IOException
{
String command = "ping -c 1 google.com";
return (Runtime.getRuntime().exec (command).waitFor() == 0);
}
您也可以将google.com更改为任何网站,因为google.com可能会在某些国家/地区停用。
我在一项不是作为服务的活动中使用它,但它会起作用。