您好!抱歉,我是超级初学,回答请写的仔细点,最好是傻瓜教程,我接触这个也就一个月,每天平均不到半小时。以下是我的AS版本:
如下图,在已有代码的基础上,让Webview在载入网页上的视频、音频播放时,能让红色区域内的按钮,实现横屏全屏播放,以及实现该视频、音频的下载:
下面是我的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载入网页上可下载音频的页面时,却显示这个样子:
有请指点,只要我复制进文件后,可实现视频全屏播放,可下载视频和音频文件,就会采纳,谢谢!
我已将工程文件打包,上传,有劳帮忙解决一下:链接: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,让它能够下载文件。