webView播放(打开)网页上的视频

本文介绍了在WebView中播放网页视频的初始化过程,包括在onResume、onPause和onDestroy中的处理。在onDestroy中,使用webView.destroy()可能导致异常,需要根据设备情况进行调整。在不同操作如按下home键、锁屏键或返回键后,视频播放状态的处理逻辑也进行了说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、初始化

settings = webView.getSettings();
 webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
    settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}

因为是在之前的基础上修改的,不确定之前设置的属性是否有影响,下面把其他属性也附带展示:

 settings.setDomStorageEnabled(true);
 settings.setLoadsImagesAutomatically(true);
 settings.setAppCacheEnabled(true);
 settings.setJavaScriptEnabled(true);
 settings.setLoadWithOverviewMode(true);
 settings.setUseWideViewPort(true);
 settings.setBlockNetworkImage(true);
 settings.setDefaultTextEncodingName("utf-8"); // 设置文本编码

在onResume()中

try {
    if (isOnPause) {
        if (webView != null) {
            webView.getClass().getMethod("onResume").invoke(webView, (Object[]) null);
        }
        isOnPause = false;
    }
} catch (Exception e) {
    e.printStackTrace();
}
super.onResume();

在onPause()中

try {
    if (webView != null) {
        webView.getClass().getMethod("onPause").invoke(webView, (Object[]) null);
        isOnPause = true;
    }
} catch (Exception e) {
    e.printStackTrace();
}
super.onPause();

在onDestroy()中

try {
    if (webView != null) {
        webView.getSettings().setBuiltInZoomControls(true);
        webView.destroy();
        //webView.setVisibility(View.GONE);
        //long delayTime = ViewConfiguration.getZoomControlsTimeout();
        //new Timer().schedule(new TimerTask() {
        //@Override
        //public void run() {
        //webView.destroy();
        //webView = null;
        //}
        //}, delayTime);
    }
    isOnPause = false;
} catch (Exception e) {
    e.printStackTrace();
}
super.onDestroy();

注:
onDestory中被注释掉的,//webView.destroy();这句话,会在我用的测试手机上报异常

java.lang.Throwable: A WebView method was called on thread 'Timer-0'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 1) {70e4402} called on null, FYI main Looper is Looper (main, tid 1) {70e4402})

但是,这句话,是之前一个博客上写的,那个博客上用的是注释掉的那几句。不知道为什么,我用了被注释那几句就不行。只有把webView.destroy()提到外面,才正常。2种方法,看情况而定。

以下是测试webView播放视频手机,均正常
测试手机基本数据

    品牌      型号            Android版本


    三星      SM-A7000        4.4.4

    小米      MI NOTE LTE     6.0.1(MIUI版本:8.1稳定版)

    vivo    X6D         5.1

测试流程:
1、从一个activity,打开webView所在activity,点击上面的视频播放
2、视频播放过程中,点击home键,视频暂停、语音停止,再回去,视频处于暂停状态,需要手动点击开启继续播放
3、视频播放过程中,点击锁屏键,视频暂停、语音停止,开屏,视频处于暂停状态,需要手动点击开启继续播放
4、点击返回键,webView所在activity被finish,停留在上一个activity一会,没有发现崩溃。继续操作app正常。(如果用了onDestory中的被注释掉的timer方法去调用webView的销毁。点击返回键,回到上一个activity后,3秒左右,会崩溃。所报异常就是上面那个)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值