【问题标题】:How to Check Internet Connection Continuously in Android | Java | Android Studio如何在Android 中连续检查Internet 连接|爪哇 |安卓工作室
【发布时间】:2021-05-31 21:06:06
【问题描述】:

我在 android studio 421 工作了几天,我对 android 开发非常陌生。在这里我需要检查互联网连接,如果有互联网,我需要显示一个网页,如果没有互联网,我需要显示一个警告框,提示“找不到互联网连接”。这是我到目前为止所做的代码。

package com.example.x;


import androidx.appcompat.app.AppCompatActivity;


import android.os.Bundle;
import android.view.KeyEvent;
import android.view.WindowManager;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;


public class MainActivity extends AppCompatActivity {



    public void onBackPressed()
    {
        if(web.canGoBack())
            web.goBack();
    }


    WebView web;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);
        web = findViewById(R.id.webView);
        WebSettings webSettings = web.getSettings();
        webSettings.setJavaScriptEnabled(true);
        web.setWebChromeClient(new WebChromeClient());
        web.loadUrl(getString(R.string.u));
        web.setWebViewClient(new WebViewClient());


    }






    private class Callback extends WebViewClient {
        @Override
        public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {
            return true;
        }
    }

}

但是当没有互联网连接时,警报不会显示。

我已启用

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

在 AndroidManifest.xml 中。我被困在这里,我不知道下一步该怎么做。我google了很多,但找不到答案。谁能帮帮我?

【问题讨论】:

  • 您几乎不应该(包括在这种情况下)连续检查任何内容。而是在状态更改时注册通知。
  • 没错。检查是否有任何资源可用的最佳方法是在需要时尝试以正常方式使用它。任何其他技术都构成试图预测未来。无论如何,您必须在使用站点处理错误:为什么还要编写代码?

标签: java android webview connection


【解决方案1】:

我需要检查互联网连接,如果有互联网,我需要显示一个网页,如果没有互联网,我需要显示一个警告框,提示“找不到互联网连接”。

所以,这与问题标题有些矛盾(持续观察互联网连接)

因此,如果您只需要检查 Internet 连接是否可用,您可以通过触发 connectivityMgr.getActiveNetworkInfo() 使用系统服务 Context.CONNECTIVITY_SERVICE 进行检查,但由于 API-21 已弃用此功能,因此您需要迁移它给connectivityMgr.getAllNetworks()

将其集成到实用方法中:

public boolean isOnline(Context context) {

    boolean isConnected = false;
    ConnectivityManager   mConnectivityMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
        // Checking internet connectivity
        NetworkInfo activeNetwork = null;
        if (mConnectivityMgr != null) {
            activeNetwork = mConnectivityMgr.getActiveNetworkInfo(); // Deprecated in API 29
        }
        isConnected = activeNetwork != null;

    } else {
        Network[] allNetworks = mConnectivityMgr.getAllNetworks(); // added in API 21 (Lollipop)

        for (Network network : allNetworks) {
            NetworkCapabilities networkCapabilities = mConnectivityMgr.getNetworkCapabilities(network);
            if (networkCapabilities != null) {
                if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
                        || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
                        || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET))
                    isConnected = true;
            }
        }
    }

    return isConnected;

}

那么你可以这样做:

if (isOnline(MainActivity.this)) {
    // display a webpage
} else {
    // display an alert box saying 
}

【讨论】:

    猜你喜欢
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多