Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了与Android WebView中的HTML5视频不一致大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Android WebView中的HTML5页面显示.mp4视频时,从远程URL检索文件时,视频和音频都会正常播放.尝试从设备的“/ mnt / sdcard / ….”路径中播放相同的媒体文件时,仅播放媒体文件的音频部分.有什么想法吗?有没有人经历(并希望解决)类似的东西?这可能是一个编解码器问题,尽管通过网络检索时可以看到视频?是否通过网络返回视频,然后以某种方式进行操作或转换,最后进入WebView.

解决方法

以下代码我有用,希望对您有所帮助,
我认为很多人都面临着同样的问题,所以这就是我在我的Applications WebView中运行HTML5视频所做的.

我将引导您完成该程序.

我想在我的App的WebView中一个一个地加载多个HTML页面.这些HTML页面包含音频后跟视频,或视频后跟音频.

以下是一个此类HTML页面的示例.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
    <head>
        <title>screen2</title>
        <Meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link href="css/main-v1.css" rel="stylesheet" type="text/css">
        <link href="css/screen2-v1.css" rel="stylesheet" type="text/css">
        <script src="js/jQueryTest.js"></script>
    </head>
    <body>          
        <audio id="audio1" src="audio/screen2_a.mp3"></audio>
        <video id="video1" src="video/mov_bbb.mp4"></video> 
    </body>
</html>

现在我创建了Class作为Android页面和HTML页面中Javascript之@L_674_24@接口.

这是我的Projects src文件夹中名为JsHandler.java的JavaScripTinterface类

package com.example.dms;

import java.io.IOException;

import com.example.dms.R;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;
import android.webkit.JavascripTinterface;
import android.webkit.WebView;

public class JsHandler {
    Activity activity;
    String TAG = "JsHandler";
    WebView webView;

    public JsHandler(Activity _contxt,WebView _webView) {
        activity = _contxt;
        webView = _webView;
    }

    /**
     * This function handles call from JS
     */
    @JavascripTinterface 
    public void initVideo()
    {
        webView.loadUrl("javascript:playVideo()");
    }

    public void initAudio()
    {
        webView.loadUrl("javascript:playAudio()");
    }

    /**
     * This function handles call from Android-Java
     */
    public void javaFnCall(String jsString) {

        final String webUrl = "javascript:diplayJavaMsg('"+jsString+"')";
        // Add this to avoid android.view.windowmanager$badtokenexception unable to add window
        if(!activity.isFinishing()) 
            // loadurl on UI main thread
        activity.runOnUiThread(new Runnable() {

            @Override
            public void run() {
                webView.loadUrl(webUrl); 
            }
        });
    }

    /**
     * function shows Android-Native Alert Dialog
     */
    public void showDialog(String msg){

        AlertDialog alertDialog = new AlertDialog.builder(activity).create();  
        alertDialog.settitle(activity.getString(R.String.app_dialog_titlE));
        alertDialog.setmessage(msg);  
        alertDialog.setButton(DialogInterface.bUTTON_POSITIVE,activity.getString(R.String.ok_text),new DialogInterface.onClickListener() 
        {  
            public void onClick(DialogInterface dialog,int which) 
            {  
                dialog.dismiss();
            }
        }); 
        alertDialog.setButton(DialogInterface.bUTTON_NEGATIVE,activity.getString(R.String.cancel_text),new DialogInterface.onClickListener() 
        {
            @Override
            public void onClick(DialogInterface dialog,int which)
            {
                dialog.dismiss();
            }
        }); 
        alertDialog.show();
    }
}

这是我的MainActivity中的代码,它在WebView中加载HTML页面

public class MainActivity extends Activity{

//WebView Variables
private JsHandler _jsHandler;
private WebView myWebView;

@Override
protected void onCreate(Bundle savedInstanceStatE) {
    super.onCreate(savedInstanceStatE);
    setContentView(R.layout.activity_main);

    myWebView = (WebView) findViewById(R.id.webView);

    myWebView.setOnTouchListener(new View.onTouchListener() {
        @Override
        public Boolean onTouch(View view,MotionEvent event) {
            // TODO Auto-generated method stub
             if(event.getAction() == MotionEvent.ACTION_DOWN && !view.hasFocus()) {
                    view.requestFocus();
                }
            return false;
        }
    });

    initWebView();   
}

private void initWebView(){

    //Tell the WebView to enable javascript execution.
    myWebView.getSetTings().setJavaScriptEnabled(true);
    myWebView.setBACkgroundColor(Color.parseColor("#808080"));

        //Set whether the DOM storage API is enabled.
    myWebView.getSetTings().setDomStorageEnabled(true);

        //setBuilTinZoomControls = false,removes +/- controls on screen
    myWebView.getSetTings().setBuilTinZoomControls(false);

    myWebView.getSetTings().setPluginState(PluginState.oN);
    myWebView.getSetTings().setAllowFileAccess(true);

    myWebView.getSetTings().setAppCacheMaxSize(1024 * 8);
    myWebView.getSetTings().setAppCacheEnabled(true);

    _jsHandler = new JsHandler(this,myWebView);        
    myWebView.addJavascripTinterface(_jsHandler,"JsHandler");

    myWebView.getSetTings().setUseWideViewPort(false);
    myWebView.setWebChromeClient(new WebChromeClient());
    myWebView.setWebViewClient(new WebViewClient());

    // these setTings speed up page load into the webview
    myWebView.getSetTings().setRenderPriority(RenderPriority.HIGH);
    myWebView.getSetTings().setCacheMode(WebSetTings.LOAD_NO_CACHE);
    myWebView.requestFocus(View.FOCUS_DOWN);
    myWebView.loadUrl("file:///android_asset/screen2.html");

}

}

这是虑到要加载的HTML页面驻留在项目的assets文件夹中.

我做的是将媒体文件放在mnt / sdcard /中

我需要相应地更改音频和视频标签的src属性.另外正如我前面提到的我创建的JavaScripTinterface类,我将使用该类调用音频或视频来播放Java,而不是HTML处理它.

所以,这是新HTML页面的样子

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
    <head>
        <title>screen2</title>
        <Meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link href="css/main-v1.css" rel="stylesheet" type="text/css">
        <link href="css/screen2-v1.css" rel="stylesheet" type="text/css">
        <script src="js/jQueryTest.js"></script>

        <script>
            function playVideo()
            {
                var cV = document.getElementById("video1");
                cV.addEventListener('ended',function ()
                                                {
                                                    cV.removeEventListener('ended'); 
                                                    playAudio();
                                                },falsE);
                cV.play();
            }

            function playAudio()
            {
                var cA = document.getElementById("audio1");
                cA.addEventListener('ended',function ()
                                                {
                                                    cA.removeEventListener('ended'); 
                                                    playVideo();
                                                },falsE);
                cA.play();
            }
            function init(){

                JsHandler.initVideo();
            }
        </script>
        <script>
             $(document).ready(function(){
                init();
            });
        </script>
    </head>
    <body>
            <audio id="audio1" src="/mnt/sdcard/Android/data/com.exapmle.dms/files/resources/audio/screen2_a.mp3"></audio>
            <video id="video1" src="/mnt/sdcard/Android/data/com.exapmle.dms/files/resources/video/mov_bbb.mp4"></video>

    </body>
</html>

为了解释这里发生的事情,当HTML页面完全加载时,我调用了init(); HTML页面中定义的方法.

方法调用initVideo(); JsHandler类中定义的方法

如你所见,这个initVideo();方法调用playVideo(); HTML页面中定义的方法.

您可能想知道为什么不调用playVideo();方法直接在页面加载,
好吧,我已经尝试过它并没有用,(至少对我来说).

我希望它可以帮助您或任何在WebView中加载HTML 5视频时遇到类似问题的人

大佬总结

以上是大佬教程为你收集整理的与Android WebView中的HTML5视频不一致全部内容,希望文章能够帮你解决与Android WebView中的HTML5视频不一致所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。