网络是否可用以及是否连接网络"/>
Android中判断连接的网络是否可用以及是否连接网络
获取网络信息需要在AndroidManifest.xml文件中加入相应的权限。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
判断是否有网络连接,但是如果该连接的网络无法上网,也会返回true
public static boolean isNetworkConnected(Context context) {if (context != null) {ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();if (mNetworkInfo != null) {//这种方法也可以//return mNetworkInfo .getState()== NetworkInfo.State.CONNECTEDreturn mNetworkInfo.isAvailable();}}return false;}
当有网络连接时,如果想要检测当前连接的网络能否上网,需要能否打开网址来做判断,涉及到网络的在子线程里面执行
<uses-permission android:name="android.permission.INTERNET" />/*** 在子线程里开启该方法,可检测当前网络是否能打开网页* true是可以上网,false是不能上网*/public static boolean isOnline() {URL url;try {url = new URL("");InputStream stream = url.openStream();return true;} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return false;}
ping一个外网也可以起到同样的效果,要加网络权限,同样涉及到网络的在子线程里面执行
<uses-permission android:name="android.permission.INTERNET" />//判断是否有外网连接(普通方法不能判断外网的网络是否连接,比如连接上局域网)public static final boolean ping() {String result = null;try {String ip = "www.baidu";// ping 的地址,可以换成任何一种可靠的外网 Process p = Runtime.getRuntime().exec("ping -c 3 -w 100 " + ip);// ping网址3次 //读取ping的内容,可以不加 InputStream input = p.getInputStream();BufferedReader in = new BufferedReader(new InputStreamReader(input));StringBuffer stringBuffer = new StringBuffer();String content = "";while ((content = in.readLine()) != null) {stringBuffer.append(content);}Log.d("------ping-----", "result content : " + stringBuffer.toString());// ping的状态 int status = p.waitFor();if (status == 0) {result = "success";return true;} else {result = "failed";}} catch (IOException e) {result = "IOException";} catch (InterruptedException e) {result = "InterruptedException";} finally {Log.d("----result---", "result = " + result);}return false;}
转载于:
更多推荐
Android中判断连接的网络是否可用以及是否连接网络
发布评论