我需要检测Android设备是否已连接到Internet.
本NetworkInfo类提供了一个非静态方法isAvailable()听起来很完美.
问题是:
NetworkInfo ni = new NetworkInfo();
if (!ni.isAvailable()) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
抛出此错误:
The constructor NetworkInfo is not visible.
Run Code Online (Sandbox Code Playgroud)
安全的赌注是有另一个类返回一个NetworkInfo对象.但我不知道哪个.
我创建了以下用于检查连接状态的函数:
private void checkConnectionStatus() {
HttpClient httpClient = new DefaultHttpClient();
try {
String url = "http://xxx.xxx.xxx.xxx:8000/GaitLink/"
+ strSessionString + "/ConnectionStatus";
Log.d("phobos", "performing get " + url);
HttpGet method = new HttpGet(new URI(url));
HttpResponse response = httpClient.execute(method);
if (response != null) {
String result = getResponse(response.getEntity());
...
Run Code Online (Sandbox Code Playgroud)
当我关闭服务器进行测试时,执行会等待很长时间
HttpResponse response = httpClient.execute(method);
Run Code Online (Sandbox Code Playgroud)
有谁知道如何设置超时以避免等待太久?
谢谢!
我在Android应用程序上遇到了一个奇怪的错误.我正在使用Xampp测试本地服务器.该应用程序将从数据库中检索记录并将其存储在手机中.
问题是我在Android 2.3.6的摩托罗拉XT550和Android 4.0.4的索尼Xperia S中测试了应用程序,该应用程序运行正常.但是,当我用三星Fame与Android 4.1.2(我的客户的手机)测试它时,它不起作用.
这是LogCat:
02-22 04:48:33.001 3961-3976/com.sistel.manantiales W/System.err? at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:183)
02-22 04:48:33.001 3961-3976/com.sistel.manantiales W/System.err? at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
02-22 04:48:33.001 3961-3976/com.sistel.manantiales W/System.err? at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
02-22 04:48:33.011 3961-3976/com.sistel.manantiales W/System.err? at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
02-22 04:48:33.011 3961-3976/com.sistel.manantiales W/System.err? at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:670)
02-22 04:48:33.011 3961-3976/com.sistel.manantiales W/System.err? at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:509)
02-22 04:48:33.011 3961-3976/com.sistel.manantiales W/System.err? at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
02-22 04:48:33.011 3961-3976/com.sistel.manantiales W/System.err? at com.sistel.manantiales.SyncActivity$DatabaseSync.updateDatabase(SyncActivity.java:198)
02-22 04:48:33.011 3961-3976/com.sistel.manantiales W/System.err? at com.sistel.manantiales.SyncActivity$DatabaseSync.doInBackground(SyncActivity.java:165)
02-22 04:48:33.011 3961-3976/com.sistel.manantiales W/System.err? at com.sistel.manantiales.SyncActivity$DatabaseSync.doInBackground(SyncActivity.java:147)
02-22 04:48:33.011 3961-3976/com.sistel.manantiales W/System.err? at android.os.AsyncTask$2.call(AsyncTask.java:287)
02-22 04:48:33.011 3961-3976/com.sistel.manantiales W/System.err? at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-22 …Run Code Online (Sandbox Code Playgroud) 有没有办法检测Google Glass是否在运行时连接到互联网?例如,在我的应用中使用语音输入时,我经常收到"无法立即访问Google"的消息.相反,我想先发制人地拦截导致该消息并使用默认值而不是要求语音输入的条件.在搜索了一段时间之后,我唯一能找到的就是针对Android的相同问题的解决方案:
private boolean isConnected() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
Run Code Online (Sandbox Code Playgroud)
我尝试将它用于我的Glassware但它似乎不起作用(我关闭了wifi和数据,但isConnected()仍然返回true,即使我得到"无法立即到达Google"消息).有谁知道GDK是否有办法做到这一点?或者应该类似于上述方法的工作?
编辑:这是我最终的解决方案,部分基于下面的EntryLevelDev的答案.
我不得不使用后台线程来使用HTTP GET请求以避免获得NetworkOnMainThreadException,因此我决定让它每隔几秒运行一次并更新本地isConnected变量:
public static boolean isConnected = false;
public boolean isDeviceConnectedToInternet() {
return isConnected;
}
private class CheckConnectivityTask extends AsyncTask<Void, Boolean, Boolean> {
protected Boolean doInBackground(Void... voids) {
while(true) {
// Update isConnected variable.
publishProgress(isConnected());
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* Determines if the Glassware can access the …Run Code Online (Sandbox Code Playgroud)