簡體   English   中英

繼續在 Android 應用程序中檢查互聯網連接 [檢查互聯網的可用性]

[英]Continues Internet Connection Checking in Android App [Checking Availability of Internet]

在回答或僅通過查看問題標題采取任何行動之前,請仔細閱讀說明,我昨天和今天一整天都在嘗試這樣做,但我找不到任何可接受的解決方案。 有些已從 android 中棄用,有些無法正常工作,有些只是檢查互聯網是否已連接 但這不是我要的。

在這方面,我已經應用了許多 Stack Overflow 的答案,但沒有什么是完美的。 我要求的功能是,說MathActivity.javaactivity_math.xml是單擊mainActivity.javabutton后加載的頁面。 MathActivity.java在單擊按鈕后啟動時,它主要可以通過 ping 方法檢查活動的互聯網連接。 雖然它不能正常工作,

public boolean checkIntCON() {
        try {
            Process ipProcess = Runtime.getRuntime().exec("/system/bin/ping -c 1 8.8.8.8");
            return (ipProcess.waitFor() == 0);
        }
        catch (IOException e)          { e.printStackTrace(); }
        catch (InterruptedException e) { e.printStackTrace(); }
        return false;
    }

但它只在我輸入時檢查一次[我做了那項工作,但我不想要那樣] ,說用戶正在閱讀activity_math.xml的 pdf 並且當用戶閱讀此用戶時關閉了互聯網連接,我也能夠當用戶關閉連接時收聽該功能,這沒問題,但如果用戶再次打開互聯網不可用的數據,那么我就聽不到這個了。

我想獲得最新和最大設備支持的解決方案,以檢查繼續 Internet 連接。 說用戶正在閱讀 pdf,五分鍾后我想檢查用戶是否有活動的互聯網連接。 連接應該是必須可傳輸的互聯網連接。 我找到了AsyncTask解決方案,但它已被棄用。 主要重點是我想在一定時間間隔后檢查用戶活動的互聯網連接。

這是一張圖片來解釋更多, 查看互聯網已連接但未激活互聯網但顯示數據已連接

有什么解決辦法嗎? 如果有的話,請嘗試給我詳細的代碼,我只想復制並粘貼到項目中。 我再次訪問了堆棧溢出中的所有內容。

傳遞上下文並調用函數,我認為這就是您要尋找的。

 public static boolean isConnected(Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
            Log.d("VIP", "isConnected: " + capabilities.getTransportInfo() + " down stream " + capabilities.getLinkDownstreamBandwidthKbps() +
                    " up stream " + capabilities.getLinkUpstreamBandwidthKbps() + " Cellular " + capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
                    + " WiFi " + capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) + " Ethernet " + capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET));
            return capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET);
        } else {
            NetworkInfo networkInfo = Objects.requireNonNull(connectivityManager).getActiveNetworkInfo();
            boolean b = networkInfo != null && networkInfo.isConnected() && networkInfo.getDetailedState() != NetworkInfo.DetailedState.VERIFYING_POOR_LINK;
            Log.d("VIP", "isConnected: else is connected " + b);
            return b;
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM