一、         首先要了解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. h5页面与Android原生页面交互
  2. Android SharedPreferences 存储复杂对象
  3. Android : 如何在WebView显示的页面中查找内容
  4. 三层缓存机制-新知识点,Android常见的内存缓存算法(LruCache原理
  5. Android使用Parcelable传递对象方法及注意事项
  6. Android商城购物车页面实现和逻辑实现
  7. android 登陆、提交数据或加载数据时提示页面
  8. Android客户端嵌入html5页面
  9. android 如何判断当前进程在主页面

随机推荐

  1. Android的消息处理机制(Looper,Handler,Mess
  2. android SQLite常用数据类型
  3. android 一个Apk启动另一个Apk
  4. Android透明度的设置(transparent transl
  5. Android(安卓)Activity 和 ViewGroup中事
  6. Android(安卓)XMPP 例子(Openfire+asmack
  7. Android从相册中获取图片以及路径
  8. 笑谈Android之Shared Preferences
  9. android开发文档工具集(持续更新中...)
  10. Android(安卓)dumpsys