Fah*_*had 18 java android internet-connection android-manifest android-emulator
我想以编程方式检查Android手机/模拟器中是否存在互联网连接.因此,一旦我确定存在互联网连接,那么我将打电话给互联网.
所以它就像"嘿模拟器!如果你有互联网连接,那么请打开这个页面,否则doSomeThingElse();"
Chr*_*ner 26
我为自己实现的方法:
/*
* isOnline - Check if there is a NetworkConnection
* @return boolean
*/
protected boolean isOnline() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnected()) {
return true;
} else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,这是NetworkConnection-Check.如果有NetworkConnection,则不必是InternetConnection.
ton*_*099 11
连接到网络并不能保证互联网连接.
您可能已连接到家庭的无线网络,但您可能没有互联网连接.或者,您可能在餐厅,您可以连接到wifi,但仍然需要热点的密码才能使用互联网.在这种情况下,上述方法将返回true,但设备不会有互联网,如果没有正确的尝试和捕获包围,应用程序可能会崩溃.
底线,网络连接,并不意味着互联网连接,它只是意味着您的设备的无线硬件可以连接到另一台主机,两者都可以建立连接.
以下是一种方法,可以检查设备是否可以连接到网站并相应地返回答案.
if (networkConnectivity())
{
try
{
HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.anywebsiteyouthinkwillnotbedown.com").openConnection());
urlc.setRequestProperty("User-Agent", "Test");
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(3000); //choose your own timeframe
urlc.setReadTimeout(4000); //choose your own timeframe
urlc.connect();
networkcode2 = urlc.getResponseCode();
return (urlc.getResponseCode() == 200);
} catch (IOException e)
{
return (false); //connectivity exists, but no internet.
}
} else
{
return false; //no connectivity
}
Run Code Online (Sandbox Code Playgroud)
至于问题标题,你想检查互联网访问,
所以最快的方式,至少目前是有效的,
thnx 根据他的回答levit :https://stackoverflow.com/a/27312494/3818437
如果您只是想检查与任何网络的连接 - 如果互联网可用则不关心 - 那么这里的大部分答案(包括已接受的),实现isConnectedOrConnecting()都能正常工作.如果您想知道您是否有互联网连接(如问题标题所示),请在Ping上阅读主要名称服务器
public boolean isOnline() {
Runtime runtime = Runtime.getRuntime();
try {
Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
int exitValue = ipProcess.waitFor();
return (exitValue == 0);
} catch (IOException e) { e.printStackTrace(); }
catch (InterruptedException e) { e.printStackTrace(); }
return false; }
Run Code Online (Sandbox Code Playgroud)
而已!是的,简短,是的,它很快,不需要在后台运行,不需要root权限.
可能的问题
这真的够快吗?
是的,非常快!
除了在互联网上测试一些东西之外,是否真的没有可靠的方法来检查互联网是否可用?
不是我所知,但请告诉我,我会编辑我的答案.
难道我不能ping我自己的页面,我想要请求吗?
当然!如果您想区分"可用的互联网连接"和您自己的服务器,您甚至可以检查两者
如果DNS关闭怎么办?
Google DNS(例如8.8.8.8)是全球最大的公共DNS服务.截至2013年,它每天为1300亿个请求提供服务.我们只是说,你的应用程序没有响应可能不是当天的话题.
需要哪些权限?
只是互联网访问 - 什么惊喜^^(顺便说一句,你有没有想过,如果没有这个许可,这里建议的一些方法甚至可能有关于互联网可用性的远程胶水?)
尝试这个:
ConnectivityManager connec = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
if(connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED || connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING ) {
text.setText("hey your online!!!") ;
//Do something in here when we are connected
} else if(connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED || connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED ) {
text.setText("Look your not online");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24585 次 |
| 最近记录: |