(转)WebView与JS交互和VedioView的简单使用

    xiaoxiao2021-12-14  18

    一、WebView介绍转载自:http://www.2cto.com/kf/201608/536207.html

    我们都知道我们的Native是可以和web页面中的JS进行交互的,而且方法都差不多,那我们就来看看他们的差别和使用场景吧

    首先我们必须设置webView.getSettings().setJavaScriptEnabled(true);

    1.Webview里面的界面调用Native Java代码(即调用本地代码)

    首先我们需要定义一个类,在这个类中定义一些方法供我们的Js调用: protected class AndroidJsInterface{ private Context context; public AndroidJsInterface(Context context){ this.context = context; } @JavascriptInterface public void showToast(String msg){ ToastUtil.showShort(context,msg); } } 值得注意的是,在Android4.2开始,我们必须田间@JavascriptInterface注解,我们的代码才能够被Js所调用。 然后我们就需要把这个接口类传递给Webview,然Js可以调用:webView.addJavascriptInterface(new AndroidJsInterface(this),"Android"); 这个方法的第二个参数是任意一个String类型的值,这个字会关系到我们后面调用接口中的方法。 下面就是我在Html页面中定义了一个Button,让点击的时候调用Native的Toast, 然后就是按钮,我们绑定了它的点击事件: <!DOCTYPE html> <html> <head> <script type="text/javascript"> function showToast(){ Android.showToast("pupup window from HTML5!"); } </script> <meta charset="utf-8"> <title>first html5 page</title> <style type = "text/css"> p{font-size:150%;} </style> </head> <body> <header> <h1>title</h1> </header> <section> <button id ="test" onclick = "showToast()">click here show toast</button> <article> <p>this is a picture</p> </article> <figure class="marginRight"><img src ="http://avatar.csdn.net/D/1/F/1_qq_24956515.jpg" alt="Image"/></figure> </section> </body> </html>

    使用时代码里写上:

    String myTest = "file:///android_asset/html_test22.html"; webView.loadUrl(myTest);这里是使用本地的Html文件,如果有不懂请参考这篇文章: http://blog.csdn.net/u011150924/article/details/53079916

    2.Native调用Webview中的Js

    还记得我们前面讲过的WebViewClient吗?我们这里就需要先实现它,然后在它的onPagerFinish()回调函数中进行处理,这样是为了保证我们代码的正常运行,因为在以往的时候,当我们没有在这个回调当中执行操作,而是直接在LoadUrl()后就对页面进行操作,结果发现我们的代码没有起作用,最后发现是页面没有加载完成,而我们就去执行代码,所以造成了这种没必要的操作。 为了测试Native调用Js,我们现在Html页面中定义一个方法和一个Span标签: 在方法中我们让调用show()方法后,将Span标签里面的内容改为一个字符串,并弹出一个alert。 在Native中我们通过如下的LoadUrl()的方法调用这个函数: 就是这么简单,我们就实现了Native到Js的调用,但是我们用一个需求,我们向得到一个回调怎么办了?Google在Android4.4为我们新增加了一个新方法,这个方法比loadUrl方便,而且比loadUrl效率更高,因为每次load都会将页面刷新一次。

    由于新增加的方法是4.4才引入的,所以我们使用的时候需要添加版本的判断: 、 如果是4.4之前的老版本,我们才用loadUrl的方式:

    3.我们在开始的时候贴出了一个我们使用setJavaScriptEnable()的警告,那我们怎么来处理这个问题了,对于大多数的应用其实是不需要的,如果需要我们可以使用一种安全的方式,例如WebChromeClient中有一个onJsPrompt的回调方法,我们可以将我们需要传递的js命令转换为一种协议的模式,通过这个回调函数传递到我们的Native中,这样就避免了我们直接与代码交互,具体的过程在这里就不介绍了,下面提出一个该框架的github地址,大家需要的时候可以去下载:https://github.com/pedant/safe-java-js-webview-bridge

    三、VedioView简单使用转载自:http://blog.csdn.net/chenzheng_java/article/details/6258456

    public class VideoActivity extends Activity {          @Override       protected void onCreate(Bundle savedInstanceState) {           super.onCreate(savedInstanceState);           setContentView(R.layout.video);                      VideoView videoView = (VideoView)findViewById(R.id.videoView1);           /***           * 将播放器关联上一个音频或者视频文件           * videoView.setVideoURI(Uri uri)           * videoView.setVideoPath(String path)           * 以上两个方法都可以。           */           videoView.setVideoPath("data/yueding.mp3");                      /**           * w为其提供一个控制器,控制其暂停、播放……等功能           */           videoView.setMediaController(new MediaController(this));                      /**           * 视频或者音频到结尾时触发的方法           */           videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {               @Override               public void onCompletion(MediaPlayer mp) {                   Log.i("通知""完成");               }           });                      videoView.setOnErrorListener(new MediaPlayer.OnErrorListener() {                              @Override               public boolean onError(MediaPlayer mp, int what, int extra) {                   Log.i("通知""播放中出现错误");                   return false;               }           });                  }   }  

    video.xml

    [xhtml]  view plain  copy <?xml version="1.0" encoding="utf-8"?>   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"       android:layout_width="match_parent" android:layout_height="match_parent"       android:orientation="horizontal">       <VideoView android:layout_height="match_parent" android:id="@+id/videoView1"           android:layout_width="wrap_content"></VideoView>   </LinearLayout>  
    转载请注明原文地址: https://ju.6miu.com/read-963811.html

    最新回复(0)