直接访问file:///是不可以的,webview会因为安全问题拦截掉,官方推荐WebViewAssetLoader


import android.webkit.MimeTypeMap;
import android.webkit.WebResourceResponse;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.webkit.WebViewAssetLoader;import java.io.FileInputStream;//首先要集成androidx.webkit:webkit:1.4.0
public class SdcardStoragePathHandler implements WebViewAssetLoader.PathHandler {@Nullable@Overridepublic WebResourceResponse handle(@NonNull String filePath) {String extension = MimeTypeMap.getFileExtensionFromUrl(filePath);String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);try {return new WebResourceResponse(mimeType, "UTF-8", new FileInputStream(filePath));} catch (Exception e) {return null;}}
}

webviewClient里拦截即可

 webView.webViewClient = object : WebViewClient() {private val webViewAssetLoader = WebViewAssetLoader.Builder().addPathHandler("/sdcard/", SdcardStoragePathHandler()).build()override fun shouldInterceptRequest(webView: WebView?, url: String?): WebResourceResponse? {return url?.let(Uri::parse)?.let(webViewAssetLoader::shouldInterceptRequest) ?: WebViewCacheInterceptorInst.getInstance().interceptRequest(url)}override fun shouldInterceptRequest(webView: WebView?, webResourceRequest: WebResourceRequest?): WebResourceResponse? {return webResourceRequest?.url?.let(webViewAssetLoader::shouldInterceptRequest) ?: WebViewCacheInterceptorInst.getInstance().interceptRequest(webResourceRequest)}
}

demoH5

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body><video controls  src="https://appassets.androidplatform.net/sdcard/storage/emulated/0/1658555194419.mp4" width="400" height="200"  autoplay></video><img src="https://appassets.androidplatform.net/sdcard/storage/emulated/0/u.jpg"/>
</body>
</html>

附:如果部分安卓板播放视频报错"setDataSource   failed    status:0x80000000"但是img是正常显示的,则有可能是安卓板webview.apk版本过低有bug引起的,升级webview.apk版本就可以了。

webview.apk下载地址

https://www.apkmirror.com/uploads/?q=android-system-webview
该网址需要特殊访问,诸君自己努力吧!

android webview访问本地文件相关推荐

  1. android webview打开相册,Android WebView调用本地相册的方法

    本文实例为大家分享了Android WebView调用本地相册的具体实现方法,供大家参考,具体内容如下 首先要知道android本身的WebView是并不支持调用手机文件并上传的,其次WebView的 ...

  2. Android WebView访问SSL证书网页(onReceivedSslError)

    Android WebView访问https SSL证书网页,如淘宝,需要在onReceivedSslError添加SSL支持 webview.setWebViewClient(new WebView ...

  3. Mac上使用nginx访问本地文件夹报403的问题

    Mac上使用nginx访问本地文件夹报403的问题 就是没有权限访问你配置的文件夹在 nginx.conf头行加入下面配置 user root wheel; 不过我的电脑在启动nginx访问的时候会发 ...

  4. 服务器读取本地文件,java远程服务器访问本地文件

    java远程服务器访问本地文件 内容精选 换一换 云服务器网络异常.防火墙未放行本地远程桌面端口.云服务器CPU负载过高等场景均可能导致云服务器无法正常登录.本节操作介绍无法登录Linux弹性云服务器 ...

  5. Android WebView注入js文件,判断当前HTML有没有某个js然后再注入

    Android WebView注入js文件,判断当前HTML有没有某个js然后再注入 1.注入js代码 判断当前有没有jQuery文件引入,然后再进行注入. 判断依据其实很简单,获取script 的d ...

  6. java访问文件服务器,java远程服务器访问本地文件

    java远程服务器访问本地文件 内容精选 换一换 云服务器网络异常.防火墙未放行本地远程桌面端口.云服务器CPU负载过高等场景均可能导致云服务器无法正常登录.本节操作介绍无法登录Linux弹性云服务器 ...

  7. 谷歌浏览器关闭跨域限制,允许跨域请求,设置允许访问本地文件

    1. 设置允许访问本地文件 只需要右键谷歌浏览器的快捷方式,查看属性,在目标一栏中空出一格然后加入字符串--allow-file-access-from-files,点击确定即可. 2. 允许跨域请求 ...

  8. 惨痛的教训,NSURL访问本地文件的问题

    今天终于有空调试之前碰到但未解决的一个问题.问题是这样的:使用http将一个视频文件(mp4格式)下载到documents目录下,拿到这个路径,ios4.3sdk下,iphone模拟器上播放失败,提示 ...

  9. 通过ip访问本地文件spring boot

    spring boot通过ip访问本地文件 方案一: 继承WebMvcConfigurerAdapter并重写addResourceHandlers方法(SpringBoot2.0及Spring 5. ...

最新文章

  1. C++11新特性中的匿名函数Lambda表达式的汇编实现分析(二)
  2. 如何通过数据包套接字攻击Linux内核
  3. 和程序员在一起是怎样的体验
  4. 金笛邮件之邮件倒入专题
  5. python 如何查看列表的维度?
  6. 接口测试总结-值得一看哟
  7. C#项目xxx针对的是.NETFramework,Version=vxxx之解决方案
  8. Unix网络编程卷1学习总结
  9. 飞鼠溪·狼(flying squirrel creek)-- BleedingWolves
  10. PHP 框架集成使用 UEditor 编辑器的方法
  11. 京瓷打印机m5521cdn_京瓷ECOSYS M5521cdn打印机驱动下载
  12. 更新华为CCE域名证书方法
  13. 计算机不显示磁盘阵列,识别不到硬盘?bios中怎么改raid为ahci硬盘模式。
  14. 【游戏逆向】浅谈某平台调试软件检测分析
  15. L1 正则化和L2正则化
  16. IDA + GDBServer实现iPhone程序远程调试
  17. 网络:分布式和网络的区别
  18. 教你玩转自己的机械键盘
  19. 有源医疗器械的开发过程和各阶段的注意事项(三)
  20. 导数法判断函数的单调性的策略【中阶和高阶辅导】

热门文章

  1. 车道线检测-从单车道到多车道的车道线检测(三)
  2. JAVA日期类的格式转换
  3. 2Kx4位的存储芯片组成16Kx8位的存储器,具体看详细~
  4. 优思学院|抽样检验的意义是什么?
  5. 第四周 Java语法总结_内部类_常用类_getclass_toStrong_equals_clone_Scanner_String_StringBuffer_Integer_集合_插入排序
  6. 使用 dataset 管理数据
  7. “让专业的人做专业的事”,畅捷通与阿里云的云原生故事
  8. 计算机应用飞机自动驾驶,计算机应用技术论文自动驾驶空中失效的影响分析与决策...
  9. 学习 Scss? 看这篇就够了
  10. 2016 海选创业项目