日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 检查当前wifi是否可以有网,可以访问网络

發(fā)布時間:2023/12/14 Android 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 检查当前wifi是否可以有网,可以访问网络 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

NetworInfo.isAvailable和NetworkInfo.isConnected只表明網(wǎng)絡連接是否已連上,不能表明連接是否可以訪問互聯(lián)網(wǎng)

要檢查設備是否在線,有以下方法:

第一種:

@TargetApi(Build.VERSION_CODES.M) public static boolean isNetworkOnline1(Context context) {boolean isOnline = false;try {ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkCapabilities capabilities = manager.getNetworkCapabilities(manager.getActiveNetwork()); // need ACCESS_NETWORK_STATE permissionisOnline = capabilities != null && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);} catch (Exception e) {e.printStackTrace();}return isOnline; }

優(yōu)點: 1.可以在UI線程上運行;2.快速準確。

缺點:需要 API >= 23 和兼容性問題。

第二種:

public static boolean isNetworkOnline2() {boolean isOnline = false;try {Runtime runtime = Runtime.getRuntime();Process p = runtime.exec("ping -c 1 8.8.8.8");int waitFor = p.waitFor();isOnline = waitFor == 0; // only when the waitFor value is zero, the network is online indeed// BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));// String str;// while ((str = br.readLine()) != null) {// System.out.println(str); // you can get the ping detail info from Process.getInputStream()// }} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}return isOnline; }

優(yōu)點: 1.可以在UI線程上運行;2.可以多次ping,統(tǒng)計min/avg/max延遲時間和丟包率。

缺點:有些手機不行如三星。

第三種

public static boolean isNetworkOnline3() {boolean isOnline = false;try {URL url = new URL("http://www.google.com"); // or your server address// URL url = new URL("http://www.baidu.com");HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestProperty("Connection", "close");conn.setConnectTimeout(3000);isOnline = conn.getResponseCode() == 200;} catch (IOException e) {e.printStackTrace();}return isOnline; }

優(yōu)點:可以在所有設備和 API 上使用。

缺點:操作耗時,不能在UI線程上運行。

第四種

public static boolean isNetworkOnline4() {boolean isOnline = false;try {Socket socket = new Socket();socket.connect(new InetSocketAddress("8.8.8.8", 53), 3000);// socket.connect(new InetSocketAddress("114.114.114.114", 53), 3000);isOnline = true;} catch (IOException e) {e.printStackTrace();}return isOnline; }

優(yōu)點:1.可以在所有設備和API上使用;2.相對快速準確。

缺點:操作耗時,不能在UI線程上運行。

本人用的是第四種:

class InternetCheck extends AsyncTask<Void, Void, Boolean> {private Consumer mConsumer;public interface Consumer {void accept(Boolean internet);}public InternetCheck(Consumer consumer) {mConsumer = consumer;execute();}@Overrideprotected Boolean doInBackground(Void... voids) {try {Socket sock = new Socket();sock.connect(new InetSocketAddress("8.8.8.8", 53), 1500);sock.close();return true;} catch (IOException e) {return false;}}@Overrideprotected void onPostExecute(Boolean internet) {mConsumer.accept(internet);} } new InternetCheck(new InternetCheck.Consumer() {@Overridepublic void accept(Boolean internet) {if (internet){//}else{//}}});

總結(jié)

以上是生活随笔為你收集整理的Android 检查当前wifi是否可以有网,可以访问网络的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。