在已有代码中,让Webview能在视频播放时能实现横屏全播放,以及该视频的下载

您好!抱歉,我是超级初学,回答请写的仔细点,最好是傻瓜教程,我接触这个也就一个月,每天平均不到半小时。以下是我的AS版本:

img

如下图,在已有代码的基础上,让Webview在载入网页上的视频、音频播放时,能让红色区域内的按钮,实现横屏全屏播放,以及实现该视频、音频的下载:

img

下面是我的MainActivity.java

package com.example.hao;

import android.os.Build;
import android.os.Bundle;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private WebView webview;
    private String APP_CACAHE_DIRNAME;

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

        webview = (WebView) findViewById(R.id.webview);
        webview.setWebViewClient(new WebViewClient());
        webview.setWebChromeClient(new WebChromeClient());
        webview.requestFocus();
        webview.loadUrl("http://www.dengzhoushixichengnianfotangjingtuwenhuachuanmei.com/");
        // 设置web视图客户端


        WebSettings webSettings = webview.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setUseWideViewPort(true);
        webSettings.setLoadWithOverviewMode(true);


        webSettings.setPluginState(WebSettings.PluginState.ON);

        webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。
        webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件
        }
//其他细节操作
        webSettings.setAllowFileAccess(true); //设置可以访问文件
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
        webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
        webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            webSettings.setTextZoom(100);
        }
//结合使用(离线加载)
        webSettings.setDomStorageEnabled(true);//启用Dom存储

        webSettings.setDomStorageEnabled(true); // 开启 DOM storage API 功能
        webSettings.setDatabaseEnabled(true);   //开启 database storage API 功能
        webSettings.setAppCacheEnabled(true);//开启 Application Caches 功能
        String cacheDirPath = getFilesDir().getAbsolutePath() + APP_CACAHE_DIRNAME;
        webSettings.setAppCachePath(cacheDirPath); //设置  Application Caches 缓存目录
        //优先使用缓存:
        webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        //缓存模式如下:
        //LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
        //LOAD_DEFAULT: (默认)根据cache-control决定是否从网络上取数据。
        //LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
        //LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
//不使用缓存:
        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);



    }


    @Override
    public void onBackPressed() {
        if (webview.canGoBack()){
            webview.goBack();
        }else {
            super.onBackPressed();
        }

    }
}

对应的布局文件是:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></WebView>




</androidx.constraintlayout.widget.ConstraintLayout>


这是androidmanifest xmln

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.hao">
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />





    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/logo"
        android:label="@string/邓州市西城念佛堂净土文化传媒"
        android:roundIcon="@mipmap/roundlogo"
        android:supportsRtl="true"
        android:theme="@style/Theme.Hao"
        android:usesCleartextTraffic="true"
        android:hardwareAccelerated="true"
        android:configChanges="keyboardHidden|orientation|screenSize"
        tools:targetApi="31">
        <activity
            android:name=".Welcome"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".MainActivity"
            android:exported="true">

        </activity>
    </application>

</manifest>

另外这个webview载入网页上可下载音频的页面时,却显示这个样子:

img


只能播放,不能下载。

有请指点,只要我复制进文件后,可实现视频全屏播放,可下载视频和音频文件,就会采纳,谢谢!

我已将工程文件打包,上传,有劳帮忙解决一下:链接:https://pan.baidu.com/s/1EuSFtz64s7iklhOYWmpFHw
提取码:ccqx

这个可以找现成的,自己做的话还是有点麻烦的。

您可以看看一下链接,和您问题相似的博文。
点这里
希望对你有帮助。

为了实现在WebView中视频播放时的横屏全屏播放和视频下载,需要做以下修改:

在调用WebView的loadUrl方法时,设置webView.getSettings().setJavaScriptEnabled(true),以便WebView可以执行JavaScript。

为WebView设置WebChromeClient,并重写WebChromeClient的onShowCustomView和onHideCustomView方法。在这些方法中,您可以调整应用程序的屏幕方向以实现横屏全屏播放。

在WebView的WebViewClient中重写onPageFinished方法,在这个方法中使用evaluateJavascript方法执行JavaScript代码,在页面上注入下载脚本。

在你的Activity中重写onBackPressed方法,并在这个方法中使用 webView.goBack()方法来控制webview返回上一个页面。

你需要在AndroidManifest.xml中配置权限,如:

还需要在WebView中配置WebViewClient,让它能够下载文件。

提供参考实例,链接:https://www.freesion.com/article/4281733106/

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

添加相应的权限,然后重写WebChromeClient的onShowCustomView和onHideCustomView方法重写一下,还有就是您的websetting配置有问题,需要重新配置一下

iewClient中重写onPageFinished方法,在这个方法中使用evaluateJavascript方法执行JavaScript代码,在页面上注入下载脚本。

在你的Activity中重写onBackPressed方法,并在这个方法中使用 webView.goBack()方法来控制webview返回上一个页面。

你需要在AndroidManifest.xml中配置权限,如:

还需要在WebView中配置WebViewClient,让它能够下载文件。