热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

webview里播放视频,点击全屏后,第一次正常,退出后再次全屏,只有声音没有图像,有对这块了解的吗?

packagecom.example.webview_test;importandroid.annotation.SuppressLint;importandroid.app.Act
package com.example.webview_test;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewParent;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.WebChromeClient.CustomViewCallback;
import android.widget.Button;
import android.widget.FrameLayout;

public class EswVideoActivity extends Activity implements OnClickListener {

private WebView webView;
private Button back_btn;
private FrameLayout video;
private CustomViewCallback customViewCallback;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_esw_video);
intiview();
LoadUrl();
}

@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
webView.onResume();
}

// 初始化
private void intiview() {
// TODO Auto-generated method stub
webView = (WebView) findViewById(R.id.webview);
back_btn = (Button) findViewById(R.id.back_btn);
// 声明video,把之后的视频放到这里面去
video = (FrameLayout) findViewById(R.id.video);
webView.setWebViewClient(new MyWebViewClient());
back_btn.setOnClickListener(this);
}

// 加载web

@SuppressLint("SetJavascriptEnabled")
private void LoadUrl() {
// TODO Auto-generated method stubs
// 设置WebView属性,能够执行Javascript脚本
webView.getSettings().setJavascriptEnabled(true);
webView.getSettings().setUseWideViewPort(true);

webView.setWebChromeClient(new DefaultWebChromeClient()); // 播放视频

webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
webView.getSettings().setLoadWithOverviewMode(true);
webView.loadUrl("http://www.iqiyi.com");


}

private class DefaultWebChromeClient extends WebChromeClient {
// 一个回调接口使用的主机应用程序通知当前页面的自定义视图已被撤职

// 进入全屏的时候
@SuppressLint("NewApi")
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {


try {

Log.e("WIDTHHHHHHH",String.valueOf(webView.getWidth()));
Log.e("LENGTHHHHHHH", String.valueOf(webView.getHeight()));
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);

// 设置webView隐藏
webView.setVisibility(View.GONE);

back_btn.setVisibility(View.VISIBLE);

video.addView(view);
//video.bringToFront();
} catch (Exception e) {
// TODO Auto-generated catch block
Log.e("YYYYYYYYYY", e.getMessage());
e.printStackTrace();
}


// 横屏显示
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// 设置全屏
setFullScreen();

customViewCallback = callback;


}

// 退出全屏的时候
@Override
public void onHideCustomView() {
if (customViewCallback != null) {
// 隐藏掉
customViewCallback.onCustomViewHidden();
}
// 用户当前的首选方向
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// 退出全屏
quitFullScreen();
// 设置WebView可见
webView.setVisibility(View.VISIBLE);
back_btn.setVisibility(View.GONE);
video.removeAllViews();
}

@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
}
}

/**
 * 设置全屏
 */
private void setFullScreen() {
// 设置全屏的相关属性,获取当前的屏幕状态,然后设置全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
// 全屏下的状态码:1098974464
// 窗口下的状态吗:1098973440
}

/**
 * 退出全屏
 */
private void quitFullScreen() {
// 声明当前屏幕状态的参数并获取
final WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().setAttributes(attrs);
getWindow()
.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}

// 关联webview 类
class MyWebViewClient extends WebViewClient {

// 加载结束的时候
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
super.onPageFinished(view, url);
}

}

// 手机返回键监听
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
// 如果是全屏状态 按返回键则变成非全屏状态,否则执行返回操作
if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
quitFullScreen();
} else {
if (webView.canGoBack()) {
webView.goBack();
} else {
finish();
}
}

return true;
default:
break;
}
return false;
}

@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
webView.onPause();
}

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch (arg0.getId()) {
case R.id.back_btn:
if (customViewCallback != null) {
// 隐藏掉
customViewCallback.onCustomViewHidden();
}
// 用户当前的首选方向
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// 退出全屏
quitFullScreen();
// 设置WebView可见
webView.setVisibility(View.VISIBLE);
// expend_headerV.setVisibility(View.VISIBLE);
back_btn.setVisibility(View.GONE);
video.setVisibility(View.GONE);

break;
default:
break;
}
}

}

6 个解决方案

#1


求好心人。。。

#2


没有人知道吗?

#3


是否
webView.setWebViewClient(new MyWebViewClient());
back_btn.setOnClickListener(this);

移到onResume()里?,特别是第一句

#4


@swl82560397pq 不管用呀

#5


自己顶一个。

#6


播什么视频?
html5视频直接用WebChromeClient重载onShowCustomView和onHideCustomView来处理

推荐阅读
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 实验九:使用SharedPreferences存储简单数据
    本实验旨在帮助学生理解和掌握使用SharedPreferences存储和读取简单数据的方法,包括程序参数和用户选项。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 【Python爬虫实操】 不创作小说,专精网站内容迁移,超高效!(含源代码)
    本文详细介绍了如何利用Python爬虫技术实现高效网站内容迁移,涵盖前端、后端及Android相关知识点。通过具体实例和源代码,展示了如何精准抓取并迁移网站内容,适合对Python爬虫实战感兴趣的开发者参考。 ... [详细]
  • JComponentJLabel的setBorder前言用例2205262241前言setBorder(Border边框)实现自JComponentjava.awt.Insets ... [详细]
  • 装饰者模式(Decorator):一种灵活的对象结构设计模式
    装饰者模式(Decorator)是一种灵活的对象结构设计模式,旨在为单个对象动态地添加功能,而无需修改原有类的结构。通过封装对象并提供额外的行为,装饰者模式比传统的继承方式更加灵活和可扩展。例如,可以在运行时为特定对象添加边框或滚动条等特性,而不会影响其他对象。这种模式特别适用于需要在不同情况下动态组合功能的场景。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • Vuforia 开发指南:第二章 环境配置与搭建
    本章节详细介绍了如何在Vuforia官网上完成账号注册及环境配置。首先,访问Vuforia官方网站并点击“Register”按钮,按照提示填写必要的个人信息。提交表单后,系统将验证信息并创建账户。接下来,用户需要下载并安装Vuforia开发工具,确保开发环境的顺利搭建。此外,还提供了详细的配置步骤和常见问题的解决方案,帮助开发者快速上手。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 本文探讨了如何利用Java代码获取当前本地操作系统中正在运行的进程列表及其详细信息。通过引入必要的包和类,开发者可以轻松地实现这一功能,为系统监控和管理提供有力支持。示例代码展示了具体实现方法,适用于需要了解系统进程状态的开发人员。 ... [详细]
  • 在Android平台上,视频监控系统的优化与应用具有重要意义。尽管已有相关示例(如http:www.open-open.comlibviewopen1346400423609.html)展示了基本的监控功能实现,但若要提升系统的稳定性和性能,仍需进行深入研究和优化。本文探讨了如何通过改进算法、优化网络传输和增强用户界面来提高Android视频监控系统的整体效能,以满足更复杂的应用需求。 ... [详细]
  • 本文深入探讨了Ajax的工作机制及其在现代Web开发中的应用。Ajax作为一种异步通信技术,改变了传统的客户端与服务器直接交互的模式。通过引入Ajax,客户端与服务器之间的通信变得更加高效和灵活。文章详细分析了Ajax的核心原理,包括XMLHttpRequest对象的使用、数据传输格式(如JSON和XML)以及事件处理机制。此外,还介绍了Ajax在提升用户体验、实现动态页面更新等方面的具体应用,并讨论了其在当前Web开发中的重要性和未来发展趋势。 ... [详细]
  • 设计实战 | 10个Kotlin项目深度解析:首页模块开发详解
    设计实战 | 10个Kotlin项目深度解析:首页模块开发详解 ... [详细]
  • 在今天的实践中,我深入学习了网页图像抓取技术,通过编写爬虫程序批量获取网站上的图片资源。具体来说,我选择了一个包含大量高质量图片的网站作为练习对象,并成功实现了将这些图片批量下载到本地存储。这一过程不仅提升了我对爬虫技术的理解,还增强了我的编程能力。 ... [详细]
  • 在前一篇文章中,我们介绍了如何使用Requests库发送GET请求。本文将深入探讨如何通过Requests库发送POST请求,包括参数格式、请求封装等关键技巧,并通过“历史上的今天”API实例进行详细说明。 ... [详细]
author-avatar
宗小胖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有