Webview 在冰淇淋三明治中显示白色空白页

2024-03-31

在我的网络视图中,我加载了一个 URL,其中包含电视频道直播的嵌入式视频播放器。它在除 ICS(4) 之外的所有 Android 操作系统版本中都能正常工作。第一次它可以很好地播放视频,但是当我返回并再次进入包含视频的页面时,视频不会加载并显示空白页面。如果我从应用程序设置中强制停止应用程序并再次启动应用程序,那么它运行良好,然后像往常一样再次出现白屏,我已经实施了很多策略,这是最新的,我完全被困在这里:

public class Livetvwebview extends Activity {

    RelativeLayout a;
    WebView webtv;
    String url;
    VideoView video;
    WChromeClient chromeClient;
    WebViewClient wvClient;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        // requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getWindow().requestFeature(Window.FEATURE_PROGRESS);
        setContentView(R.layout.livewebview);
        Toast.makeText(getApplicationContext(),
                "Channel is loading..This may take upto a minute",
                Toast.LENGTH_LONG).show();
        url = getIntent().getStringExtra("tvchannel");
        Log.i("TVURL", url);
        webtv = (WebView) findViewById(R.id.webViewlive);
        webtv.clearCache(true);
        webtv.loadUrl(url);

        webtv.getSettings().setLoadWithOverviewMode(true);
        webtv.getSettings().setUseWideViewPort(true);

        webtv.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);

        webtv.setWebChromeClient(new WChromeClient());
        webtv.setWebViewClient(new myWebClient());
        webtv.getSettings().setJavaScriptEnabled(true);

        webtv.getSettings().setPluginState(PluginState.ON);

        webtv.getSettings().setDomStorageEnabled(true);
    }



    public class myWebClient extends WebViewClient {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub

            super.onPageStarted(view, url, favicon);

        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // TODO Auto-generated method stub

            view.loadUrl(url);

            return true;
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            // TODO Auto-generated method stub
            super.onPageFinished(view, url);

        }
    }

    @SuppressLint("NewApi")
    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        WebSettings webSettings = webtv.getSettings();
        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
        webtv.onPause();
        this.finish();
        super.onPause();

    }

    @SuppressLint("NewApi")
    @Override
    protected void onResume() {



        webtv.onResume();
        super.onResume();

    }






    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        // android.os.Process.killProcess(android.os.Process.myPid());
        Editor editor = getSharedPreferences("clear_cache",
                Context.MODE_PRIVATE).edit();
        editor.clear();
        editor.commit();
        trimCache(this);

        super.onDestroy();
    }

    class WChromeClient extends WebChromeClient {
        @Override
        public void onProgressChanged(WebView view, int progress) {
            Log.i("Method", "Onrogresschanged");

            Livetvwebview.this.setTitle("Loading...");
            Livetvwebview.this.setProgress(progress * 100);
            if (progress == 100)
                Livetvwebview.this.setTitle("LiveTv");

        }

        @Override
        public void onShowCustomView(View view, CustomViewCallback callback) {
            // TODO Auto-generated method stub
            super.onShowCustomView(view, callback);
            if (view instanceof FrameLayout) {
                FrameLayout frame = (FrameLayout) view;
                if (frame.getFocusedChild() instanceof VideoView) {
                    webtv.setVisibility(View.GONE);
                    video = (VideoView) frame.getFocusedChild();
                    FrameLayout.LayoutParams par = new FrameLayout.LayoutParams(
                            LayoutParams.MATCH_PARENT,
                            LayoutParams.MATCH_PARENT);
                    par.gravity = Gravity.CENTER_HORIZONTAL;
                    video.setLayoutParams(par);
                    frame.removeView(video);
                    a.addView(video);
                    video.setOnCompletionListener(new OnCompletionListener() {

                        @Override
                        public void onCompletion(MediaPlayer mp) {
                            Toast.makeText(Livetvwebview.this,
                                    "Video completed", Toast.LENGTH_LONG)
                                    .show();

                        }
                    });

                    video.setOnErrorListener(new OnErrorListener() {

                        @Override
                        public boolean onError(MediaPlayer mp, int what,
                                int extra) {
                            Toast.makeText(Livetvwebview.this,
                                    "Encountered some error", Toast.LENGTH_LONG)
                                    .show();
                            return true;
                        }
                    });
                    video.start();
                }

            }

        }
    }

    public static void trimCache(Context context) {
        try {
            File dir = context.getCacheDir();
            if (dir != null && dir.isDirectory()) {
                deleteDir(dir);

            }
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

    public static boolean deleteDir(File dir) {
        if (dir != null && dir.isDirectory()) {
            String[] children = dir.list();
            for (int i = 0; i < children.length; i++) {
                boolean success = deleteDir(new File(dir, children[i]));
                if (!success) {
                    return false;
                }
            }
        }


        return dir.delete();
    }
}

有人可以帮我吗?


经过很长时间的研究,我自己发现当我在 onPause() 中写入时

webtv.destroy();

代替

webtv.onPause();

解决了问题:)

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

Webview 在冰淇淋三明治中显示白色空白页 的相关文章

随机推荐

  • ALV网格不刷新

    我的模块池程序中有两个屏幕 屏幕 A 和屏幕 B 屏幕 A 显示 ALV 网格并在工具栏上有 1 个按钮 屏幕 B 也显示 ALV 网格和工具栏上有 1 个按钮 当我按下屏幕 A 上的 显示订单 按钮时 我会被定向到屏幕 B 然后我在屏幕
  • 如何在 Git 中区分文件与特定版本?

    我不知道Git是否有修订的概念 我想将当前工作副本与旧版本 不一定是最后一次提交 进行比较 如果能在 Emacs 中完成那就太好了 我不知道如何在 Emacs 中执行此操作 但是 git diff rev1 rev2 将为整个存储库执行您想
  • ZF2 Zend\Db 使用 Mysql 表达式插入/更新(Zend\Db\Sql\Expression?)

    有没有办法通过 Zend Db 和 或 TableGateway insert update 语句在 ZF2 2 0 0beta4 的当前版本中包含像 NOW 这样的 MySQL 表达式 这是邮件列表上的相关帖子 但尚未得到答复 http
  • 如果计算机未连接到互联网,Liquibase 将失败

    当我尝试启动 Liquibase 使用 Karaf 时 出现以下错误 无法读取架构文档http www liquibase org xml ns dbchangelog dbchangelog 3 0 xml http www liquib
  • 我可以在 PhoneGap 中每天在指定时间安排事件/回电吗

    有什么方法 在 PhoneGap 中 我可以安排事件或回调在每天的指定时间发生 我想我正在寻找类似 Android AlarmManager 的东西 这样我就可以每天在特定时间触发一些通知 然后提示用户启动我的应用程序 你可以使用这个 ht
  • AWS使用Ubuntu 22.04启动新实例:映像的卷超出了实例允许的数量

    AWS 使用 Ubuntu 22 04 启动新实例 The selected AMI contains more instance store volumes than the instance allows Only the first
  • 抓取顺畅

    我做了一个简单的抓取演示页面 http jsfiddle net NV Nkf9n 它没有任何缓动 加速 我想做同样的缓动 加速库莱什信息网 http kulesh info Flash 网站 使用 JavaScript 我怎样才能做到这一
  • 在 iPhone 的媒体库中保存录制的视频时出现问题

    我正在尝试使用 UIImagePickerController 委托将录制的视频保存到库中 它适用于图片 但如果是视频 则不会保存 而且在尝试保存视频后 如果我打开 照片 应用程序 我会收到一条消息 请稍候 更新库 以及带有标签 的进度条
  • Javascript / Jquery 脚本因超时而终止

    作为一名 Python 爱好者 我正在尝试 JS 和 Jquery 我编写了这个小脚本来使用 Jquery 幻灯片折叠 展开 html 页面上的菜单栏 我相信这应该可以正常工作 但是它所做的只是将我的浏览器冻结大约 10 秒 然后在控制台中
  • 无法在 UWP Windows 应用程序打包解决方案中打开 AppServiceConnection

    我有一个 UWP 应用程序 它有 2 个主要部分 一个具有 UI 的 UWP 项目和一个用于提供系统托盘功能的 WinForms 项目 我正在使用 Windows 应用程序打包项目将它们连接在一起 如下例所示 https learn mic
  • NHibernate 中的 DateTime 精度以及 NHibernate SchemeExport 中对 DateTime2 的支持

    然后 我使用 Fluent NHibernate 及其自动映射功能来映射以下简化的 POCO 类 public class Foo public virtual int Id get set public virtual datetime
  • 无法在主机上加载程序集 WebPages.Deployment 版本 2?

    我有一个 ASP NET MVC 2 网站 VS2010 已升级到 ASP NET MVC 3 VS2012 这在本地 IIS7 上工作正常 但在发布它时 我在主机上遇到此异常 Could not load file or assembly
  • 如何使用 Cocoa OSX SDK 检查 TCP 端口 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想制作一个可可应用程序来检查服务器
  • (Eclipse SDK更新错误)收集要安装的项目时发生错误

    我刚刚更新了ADK 遇到了和这个家伙完全相同的问题 相同版本的升级 无法从 22 3 0 更新 ADT 到22 6 1 没有发现更新 https stackoverflow com questions 22525178 cannot upd
  • 每次我发出 http 请求时应用程序都会崩溃

    这是我的代码 每次我触摸 imageview 我的应用程序都会等待大约 5 秒然后崩溃 我有互联网权限 在服务器端 我有一个 php 页面 它读取 GET 并将其插入数据库中 public class Home extends Activi
  • MySQL显示表中每小时的条目数

    新链接 结果减少 1 https i stack imgur com 8G1Jh png我需要在表中回显给定日期每小时的条目数 即使它们是 0 这似乎正在发生 但以一种奇怪的方式 如您所见 小时列没有发挥作用这应该是 0 00 1 22 0
  • 如何在 Dart 中测试流

    如何在 Dart 中测试流 我有这个代码 test words are reading sequentially correct WordTrackerInterface wordTracker WordTracker byContent
  • 如何在 Android 中创建 url 预览?

    我想在分享时显示 Android 中任何网址的预览 就像 Facebook 或 Whatsapp 中显示的那样 预览必须包含网页中的图像和链接的简短描述 我想过从元数据和图标中获取信息 但图标大小非常小 并且元数据并不总是存在 例如 在 Q
  • 防止 Angular NativeScript WebView 通过捏合缩放进行缩放

    所以我有一个使用 Angular NG 5 1 1 Angular 7 x 的 Nativescript 应用程序 我有一个带有网络视图的视图 ViewChild myWebView webViewRef ElementRef
  • Webview 在冰淇淋三明治中显示白色空白页

    在我的网络视图中 我加载了一个 URL 其中包含电视频道直播的嵌入式视频播放器 它在除 ICS 4 之外的所有 Android 操作系统版本中都能正常工作 第一次它可以很好地播放视频 但是当我返回并再次进入包含视频的页面时 视频不会加载并显