一、         首先要了解android和js的代码交互问题。

   需要加入

webview.getSettings().setJavaScriptEnabled(true);//支持js

webview.getSettings().setPluginsEnabled(true);//设置webview支持插件

至于js与android交互的话会有安全性问题,只需将需要传过的对象封装成相应的接口形式即可,

webview.getSettings().setJavaScriptEnabled(true);//支持jswebview.getSettings().setPluginsEnabled(true);//设置webview支持插件webView.loadUrl(videoUrl);webView.addJavascriptInterface(obj,"myObj");

obj可以是对象也可以是相应的实体类(接口类均可)

这样往往会出现加载html中的视频时会没有画面,同时要在Manifest配置文件的application中加入 android:hardwareAccelerated="true" 硬件加速,这样才能够播放视频。


二、         具体步骤如下:

有很多设备开发时只有声音,没有画面,这个时候在androidmanifest.xml中添加应用程序application中设置硬件渲染为true,在Oncreate函数中启用硬件渲染即可。具体步骤如下:

 

1、androidmanifest.xml文件设置如下属性:

android:hardwareAccelerated="true"

2、OnCreate中添加:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);


做网页视频只有声音没画面,一般这样可以解决。并不是所有机型都可以,也有特例,比较少。


三、         WebView硬件加速导致页面渲染闪烁

4.0以上的系统我们开启硬件加速后,WebView渲染页面更加快速,拖动也更加顺滑。但有个副作用就是,当WebView视图被整体遮住一块,然后突然恢复时(比如使用SlideMenu将WebView从侧边滑出来时),这个过渡期会出现白块同时界面闪烁。解决这个问题的方法是在过渡期前将WebView的硬件加速临时关闭,过渡期后再开启,代码如下:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {

webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

最后附上一个完整的webview加载html页面的代码:


package *import android.annotation.SuppressLint;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.webkit.JavascriptInterface;import android.webkit.JsResult;import android.webkit.WebChromeClient;import android.webkit.WebSettings;import android.webkit.WebSettings.LayoutAlgorithm;import android.webkit.WebView;import android.widget.ImageView;import android.widget.RelativeLayout;@SuppressLint("SetJavaScriptEnabled") public class VideoWebViewActivity extends Activity{private WebView webView;private RelativeLayout rel_top;private ImageView img_back;Intent intent=null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 去除标题栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.nms_producturl_webview);AndroidApplication.getInstance().addActivity(this);setupView();intent=getIntent();//initText();}@SuppressWarnings("deprecation")private void setupView() {webView=(WebView)findViewById(R.id.productUrl_webview);WebSettings webSettings=webView.getSettings();webSettings.setJavaScriptEnabled(true);webSettings.setJavaScriptCanOpenWindowsAutomatically(true);webSettings.setLayoutAlgorithm(LayoutAlgorithm. NORMAL );webView.setVerticalScrollBarEnabled( false );  webView.requestFocusFromTouch(); webSettings.setBuiltInZoomControls(true);webSettings.setSupportZoom(true);webSettings.setPluginsEnabled(true);  //支持插件 webSettings.setUseWideViewPort(true);  //将图片调整到适合webview的大小 webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小rel_top=(RelativeLayout)findViewById(R.id.rel_top);rel_top.setVisibility(View.GONE);//img_back=(ImageView)findViewById(R.id.web_back);//img_back.setOnClickListener(new OnClickListener() {//@Override//public void onClick(View v) {//// TODO Auto-generated method stub//VideoWebViewActivity.this.finish();//}//});Intent intent=getIntent();String videoUrl=intent.getStringExtra("videoUrl");//String keyFrameUrl=intent.getStringExtra("keyFrameUrl");//String videoUrl="http://link.hhtjim.com/yyt/2711420.mp4";String keyFrameUrl="http://img.qhdxw.com/all/uploads/allimg/20161210/170.jpg";webView.setWebChromeClient( new MyWebChromeClient()); //从本地android向html传递的对象MyObject obj=new MyObject(videoUrl, keyFrameUrl);if(videoUrl!=null){//webView.loadUrl("file:///android_asset/jQuery-video5.10.8/index.html"); webView.loadUrl(videoUrl); }webView.addJavascriptInterface(obj,"myObj");//这里的myObj是javaScript对象,直接调用getTime()方法,即 myObj.getTime();}public class MyObject {private Context mContext;private String videoUrl;private String keyFrameUrl;public MyObject(Context c,String videoUrl,String keyFrameUrl){this.videoUrl = videoUrl;this.keyFrameUrl = keyFrameUrl;mContext = c;}public MyObject(String videoUrl,String keyFrameUrl){this.videoUrl = videoUrl;this.keyFrameUrl = keyFrameUrl;}/** * 获取videoUrl数据 * @return */@JavascriptInterfacepublic String getVideoUrl(){Logger.i("测试从android传入html页面的数据::=="+videoUrl);return videoUrl;}/** * 获取关键帧数据url * @return */@JavascriptInterfacepublic String getKeyFrameUrl(){Logger.i("测试从android传入html页面的数据::=="+keyFrameUrl);return keyFrameUrl;}}/** * 防止从html页面返回之后直接退出了主页面,实际上返回应该回到原声的app页面 * @author A_huan * 2017-3-5 */final class MyWebChromeClient extends WebChromeClient {@Overridepublic boolean onJsAlert(WebView view, String url, String message, JsResult result) {// Log.d(LOG_TAG, message);result.confirm();view.loadUrl(url);return true;}}}








更多相关文章

  1. Android实现页面跳转的几种方式(转贴)
  2. 安装busybox到Android设备
  3. Android(安卓)国际化(多语言)兼容8.0
  4. h5页面与Android原生页面交互
  5. Android(安卓)NDK会带来什么,除去你对NDK的一些误解
  6. Android应用程序请求SurfaceFlinger服务渲染Surface的过程分析
  7. Android(安卓)Studio项目中使用 AndroidX支持库的相关配置说明
  8. Android调用OpenGL绘制曲线入门手册
  9. Android中的图形图像

随机推荐

  1. android 开启自动旋转屏幕
  2. android操作sqlite3的blob字段,显示数据
  3. 新浪微博布局学习——活用Android的Relat
  4. android Pull方式解析xml文件
  5. Android拖动控件改变其位置
  6. Android中内容提供者ContentProvider实现
  7. android Http文件上传
  8. 【Android】手机地图功能——利用手机GPS
  9. android 6.0/7.1/9 默认打开 开发者选项
  10. android 自定义组合控件并实现点击事件