在 WebView 中检查互联网连接

2023-12-28

各位程序员大家好!

我的 WebView 应用程序出现问题...

我想在启动时添加一个“连接检查”,当没有可用的 Internet 连接或 WebView 超时时,该检查会弹出错误。我无法自己完成它,因为我是 Android 编程新手。

我还想添加一个选项菜单,我可以在其中重新加载实际页面。

希望可以有人帮帮我...

实际代码:

package net.schwarzis.htl_cloud;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;




@SuppressLint("JavascriptInterface") public class MainActivity extends Activity {
    /** Called when the activity is first created. */

    private WebView browser = null;



        public boolean shouldOverrideUrlLoading(WebView view, String url) {

            browser.loadUrl(url);
            return true;
        }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        // connect to our browser so we can manipulate it
        browser = (WebView) findViewById(R.id.mybrowser);

        // get settings so we can config our WebView instance
        WebSettings settings = browser.getSettings();

        // JavaScript?  Of course!
        settings.setJavaScriptEnabled(true);
        // clear cache
        browser.clearCache(true);

        final ProgressDialog pd=new ProgressDialog(this);
        pd.setMessage("Lade...");
        browser.setWebViewClient(new WebViewClient() {
            public void onPageFinished(WebView view, String url) {
                 pd.dismiss();
            }
       @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        pd.show();
        browser.loadUrl(url);
        return true;
    }
        });
                // this is necessary for "alert()" to work
                browser.setWebChromeClient(new WebChromeClient());

                // add our custom functionality to the javascript environment
                browser.addJavascriptInterface(new MyCoolJSHandler(), "Cloud");

                // load a page to get things started
     pd.show();
                browser.loadUrl("http://cloud.schwarzis.net");



        }


        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
             final ProgressDialog pd=new ProgressDialog(this);
             pd.setMessage("Lade...");
            if(event.getAction() == KeyEvent.ACTION_DOWN){
                switch(keyCode)
                {
                case KeyEvent.KEYCODE_BACK:
                    if(browser.canGoBack() == true){
                        pd.show();
                        browser.goBack();
                    }else{
                          pd.show();
                        finish();
                    }
                    pd.dismiss();
                    return true;
                }

            }
            return super.onKeyDown(keyCode, event);
        }



    final class MyCoolJSHandler
    {
        // write to LogCat (Info)
        public void Info(String str) {
            Log.i("GoingNative",str);
        }

        // write to LogCat (Error)
        public void Error(String str) {
            Log.e("GoingNative",str);
        }

        // Kill the app
        public void EndApp() {
            finish(); 
        }
    }

}

用户可以使用以下方法来检查互联网连接是否可用。

public boolean isNetworkAvailable() {
    // Get Connectivity Manager class object from Systems Service
    ConnectivityManager cm = (ConnectivityManager)  getSystemService(Context.CONNECTIVITY_SERVICE);

    // Get Network Info from connectivity Manager
    NetworkInfo networkInfo = cm.getActiveNetworkInfo();

    // if no network is available networkInfo will be null
    // otherwise check if we are connected
    if (networkInfo != null && networkInfo.isConnected()) {
        return true;
    }
    return false;
}

您需要在 AndroidManifest.xml 文件中提供以下权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 WebView 中检查互联网连接 的相关文章

  • 如何在可以运行直到用户停止的服务中创建 FusedLocationProviderClient?

    我已经成功创建了一个活动融合位置提供者客户端返回特定时间段内的位置坐标 但我希望它在后台服务中运行 将坐标保存在本地数据库中 并且在用户手动停止服务之前永远不会结束 这是我的源代码 private String mLastUpdateTim
  • 如何使网页视图与其内容一样大?

    我在网上找不到这个 我有很多网络浏览量HorizontalScrollView 我希望它们全部适合其内容 然后可能具有不同的宽度 更多 我给那些充气webviews像这样 LinearLayout layout LinearLayout g
  • 如何在 Android 中获取 SD 卡上文件夹的大小?

    是否可以轻松获取SD卡上文件夹的大小 我使用文件夹来缓存图像 并希望显示所有缓存图像的总大小 除了迭代每个文件之外 还有其他方法吗 它们都位于同一个文件夹中 只需浏览所有文件并将它们的长度相加即可 Return the size of a
  • 如何为不同的gradle buildTypes提供不同的Android应用程序图标?

    我的 gradle 文件中设置了两种构建类型 debug and release 我希望能够为debug构建类型 有没有办法只通过构建类型来实现这一点 而无需考虑产品风格 build gradle 文件如下 apply plugin and
  • Android - 如何使按钮不可见但仍处于活动状态?

    我试图在我的平板电脑上创建一个 热点 其作用类似于按钮 但用户看不到该按钮 当我尝试以下操作时 我有一个按钮 但当可见性设置为 4 时 用户无法交互或看到它 Button b Button findViewById R id b b set
  • 一部又一部的Android动画

    我在 TextView 上有两个 TranslateAnimations 我希望它们一个接一个地执行 但是 通过使用下面的代码 仅执行第二个代码 我该如何解决这个问题 TranslateAnimation animation new Tra
  • 如何在Android中访问Sqlite数据库?

    我可以在模拟器中使用 adb shell 命令访问我的 sqlite 数据库 但无法对我的 HTC Desire 手机执行相同操作 它会抛出一些权限被拒绝的消息 是否有可能访问这些数据库以进行调试 任何想法 提前致谢 您还可以在命令提示符
  • CollapsingToolbarLayout 无法识别滚动 fling

    我创建了一个简单的折叠工具栏布局它就像一个魅力 我的问题是 如果我尝试在嵌套滚动视图 当我松开手指时它就会停止 正常的滚动就像它应该的那样工作 我的活动代码是不变 gt 自动生成空活动 我只是单击了 android studio 中的 创建
  • ALBUM_ART列从API 29等开始被弃用,如何获取路径?

    我们目前正在使用以下方式获取专辑封面的路径 MediaStore Audio AlbumColumns ALBUM ART 并且正在成功获取路径 但 Pixel 3a Android 10 除外 经过一番研究 API 29 及以上版本已弃用
  • FragmentStatePagerAdapter 与 ChildFragmentManager - FragmentManagerImpl.getFragment 导致 NullPointerException

    EDIT 2 我现在成功地使用这里的技巧摆脱了错误https code google com p android issues detail id 42601 c10 https code google com p android issu
  • 如何限制可以选中的复选框数量? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 覆盖服务 - 按下返回按钮

    我怎样才能做到这一点 目前的解决方案 我启动了一个透明的活动 捕获后按 将其转发到我的服务 然后自行关闭 但此活动将在当前正在运行的活动中可见 因此这不是一个非常漂亮的解决方案 看到的解决方案 我见过一个应用程序确实可以捕获服务中的后按 而
  • 在 Android 5.0 Lollipop 上以编程方式在视图上设置主题

    Android 5 0 Lollipop 添加了为不同视图 不仅仅是 Activity 设置主题的功能 android theme style MyAwesomeTheme 有没有办法动态设置视图的主题 安卓 主题 https develo
  • FloatingActionButton 不隐藏

    我试图隐藏我的 FloatingActionButtonfabLocation以编程方式 fabLocation setVisibility View GONE 但它不起作用 如果我添加android visibility gone 在我的
  • SecurityException:Parcel.readException 来自谷歌分析代码

    我们的应用程序变得有很多不同SecurityException来自我们的崩溃报告软件的报告 这是崩溃的堆栈跟踪 java lang SecurityException Unable to find app for caller androi
  • 从设备获取日期并将其转换为 GMT+4

    我正在尝试查找 Android 手机的时区 因为我想获取日期对象 但我想要 GMT 4 格式 我看到的所有其他答案都会转换来自 API 请求的时间 其时区已知 我怎样才能做到这一点 其他方法可能是将服务器传来的 GMT 4 时间转换为我设备
  • 面临 process.start(); 的问题在 Android 棒棒糖中

    面临一个问题process start 在 Android 棒棒糖中 我在服务中遇到了 android lollipop 后台进程的问题 我的代码在 KitKat 之前工作正常 我有一个ProcessBuilder pBuilder并向其中
  • 是否可以通过 MediaRecorder 或其他类获取当前样本幅度

    我有一个媒体录音机 想要从麦克风录制媒体并获取 它是幅度样本 我想尝试立即获得正确的当前幅度 当调用一些API时 但 MediaRecorde 中只有一个 API 用于获取幅度 getMaxAmplitude 用于获取最大绝对幅度 自上次调
  • 当我关闭应用程序时,AsyncTask 是否会停止?

    我想将文件从手机上传到服务器 因为我正在使用 AsyncTask 如果文件很大 如果它们仍在上传并且用户关闭应用程序 上传会停止 即 AsyncTask 将结束还是继续直到完成 推荐使用Service http developer andr
  • Ionic 3 Deeplinking - 从 URL 启动应用程序

    我正在使用 Ionic 开发一个跨平台应用程序 当尝试实现深度链接时 我安装了一个名为 Ionic Native 插件深层链接 我运行了这些命令 ionic cordova plugin add ionic plugin deeplinks

随机推荐