测试WebView的文件上传

对于WebView的文件上传,WebView本身是没有进行处理的,需要覆盖如下方法进行处理:

fun onShowFileChooser(webView: WebView, filePathCallback: ValueCallback<Array<Uri>>, fileChooserParams: FileChooserParams
)

其中第三个参数包装了 htmlinput标签的一些属性,

  • fileChooserParams.mode
    • FileChooserParams.MODE_OPEN 单选
    • FileChooserParams.MODE_OPEN_MULTIPLE 多选
    • FileChooserParams.MODE_SAVE 保存
  • fileChooserParams.isCaptureEnabled 是否启用实时捕获,比如相机、麦克风。使用getAcceptTypes来确定合适的捕获设备。
  • fileChooserParams.acceptTypes 返回可接受的MIME类型数组,例如{"image/*", "video/*"},表示只允许选择图片和视频文件。如果没有指定可接受的类型,该数组将为空。

html的选择控件哪些属性对于这些属性呢,如下:

<input id="inputImage" type="file" accept="image/*" multiple capture="user">

multiple就表示多选,不需要赋值,不写这个就是单选,capture经测试好像也一样,只要写了它,则isCaptureEnabled就会是true,不论我给它赋值什么都一样。

有个简单的方式实现文件选择:

class MyWebChromeClient(private val activity: Activity) : WebChromeClient() {private var mFilePathCallBack: ValueCallback<Array<Uri>>? = nulloverride fun onShowFileChooser(webView: WebView, filePathCallback: ValueCallback<Array<Uri>>, fileChooserParams: FileChooserParams): Boolean {mFilePathCallBack = filePathCallbackval intent = fileChooserParams.createIntent()activity.startActivityForResult(intent, 100)return true}fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {if (requestCode == 100) {if (resultCode == Activity.RESULT_OK) {val results = FileChooserParams.parseResult(resultCode, data)mFilePathCallBack?.onReceiveValue(results)mFilePathCallBack = null}}}
}

但是这个方式呢,就只能是从文件管理器中选择,不会使用设备实时捕获的,而且多选也是没有的,只有单选。如何测试呢?这就需要自己写个html,然后去加载这个html进行测试了,如下:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>选择并显示图片</title><style>img {max-width: 100%;max-height: 300px;}</style></head><body><input id="inputImage" type="file" accept="image/*" multiple capture="user"><br><img id="previewImage" src="#" alt="选择的图片" style="display:none;"><script>const inputImage = document.getElementById('inputImage');const previewImage = document.getElementById('previewImage');inputImage.addEventListener('change', function(event) {const file = event.target.files[0];const reader = new FileReader();reader.onload = function(e) {previewImage.src = e.target.result;previewImage.style.display = 'block';}reader.readAsDataURL(file);});</script></body>
</html>

这里加了一段js,用于把选择的图片展示出来。把该html放到asserts目录,然后加载这个url即可:

val url = "file:///android_asset/index.html"

我们可以通过修改input 标签中的属性来测试Android上的文件选择效果。

使用fileChooserParams.createIntent()创建的文件选择器效果不是很理想,所以要想实现比较好的文件选择效果的话需要自己去实现了,但是比较麻烦,所以可以使用一些第三方的库,比如AgentWeb

// AgentWeb
implementation("io.github.justson:agentweb-core:v5.1.1-androidx")
implementation("io.github.justson:agentweb-filechooser:v5.1.1-androidx") // 可选,用于网页中的文件选择器

但是这个也不是很完美的,比如设置了accept="image/*"accept="video/*"就会弹出选项从文件中选择或者拍摄,不管你是否设置了capture属性。而且也是没有多选的,不管你是否设置了multiple 。不过公司项目没有要求那么细,我也就懒得去找更好的实现,将就着用吧。如不满足使用可在github上搜索Android File Chooser看看这些有无支持WebView的。或者搜索FilePicker

另外,AgentWeb还有下载组件:

implementation("com.github.Justson:Downloader:v5.0.4-androidx") // (可选)

要测试WebView的下载也很简单,在html中添加一个下载连接即可,如下:

<h1>Click the link below to download the file:</h1><a href="http://codown.youdao.com/reciteword/android/reciteword_official.apk" download>Download File</a>

这个下载是在通知栏显示下载进度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/737720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python基础练习 查找整数

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 给出一个包含n个整数的数列&#xff0c;问整数a在数列中的第一次出现是第几个。 输入格式 第一行包含一个整数n。 第二…

基于openpose的引体向上的识别计数统计项目(4)CPoseExtract类设计与实现

CPoseExtract设计为一个纯虚类,规定了基本的调用接口函数,便于后续扩展使用。 #pragma once#include "opencv2/core.hpp"class CPoseExtract {public:CPoseExtract() {};virtual ~CPoseExtract(

Spring容器的启动流程

1、扫描并注册BeanDefinition&#xff1a; Spring 会开始扫描指定的包&#xff0c;查找带有 Component、Service、Repository 和 Controller 等注解的类。发现的类会被处理&#xff0c;创建相应的 BeanDefinition 对象&#xff0c;封装类名、作用域、依赖关系等元数据。这些 B…

【喜报!】科大睿智为企业成功通过CMMI5级评估!

山东智云信息科技有限公司成立于2011年&#xff0c;总部地处泉城济南&#xff0c;一直专注于生态环境信息化领域解决方案的咨询设计、产品研发、项目实施和系统集成类服务&#xff0c;致力于成为固定污染源监管与非现场精准执法领域的领军企业。 山东智云拥有100余名生态环境信…

C++ 作业 24/3/11

1、提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数&#xff08;要求使用C风格字符串完成&#xff09; #include <iostream>using namespace std;int main() {string str;cout << "please enter str:&…

0基础、适合转行学Python吗?

01 对于0基础的人&#xff0c;直接学 Python 编程合适吗&#xff1f; 在目前的编程语言中&#xff0c;Python的抽象程度是最高的&#xff0c;是最接近自然语言的&#xff0c;非常容易上手&#xff0c;Python 可以让你更好的理解编程这件事情。 所以&#xff0c;我只能说非常…

SMB漏洞修复

通告背景 2020年3月11日&#xff0c;某国外安全公司发布了一个近期微软安全补丁包所涉及漏洞的综述&#xff0c;其中谈到了一个威胁等级被标记为Critical的SMB服务远程代码执行漏洞&#xff08;CVE-2020-0796&#xff09;&#xff0c;攻击者可以利用此漏洞远程无需用户验证通过…

最新免费好用的手机数据恢复软件EasyRecovery易恢复 2024

easyrecovery pro在easyrecovery的基础上进行了全新的升级&#xff0c;对于可恢复的内容进行了深度的开发&#xff0c;easyrecovery pro相比较旧版的easyrecovery而言&#xff0c;可恢复的选项更多&#xff0c;时间跨度也更长。easyrecovery pro简介&#xff1a;1、非常强大的数…

掼蛋的牌型与规律(下篇)

一、三不带 一般出三不带有几种情况&#xff1a;没有对子配、对子和三张数量不匹配、对子成了三连对、对子太大。作为发牌方&#xff0c;首发三不带可以迷惑对手。三不带打出来很难处理&#xff0c;如果接了三不带可能就会将小对子留下&#xff0c;不接又不甘心让对方继续有出牌…

知识积累(四):无

文章目录 1. KL散度2. GELU 激活函数3. 向量运算4. bert4.1 词嵌入4.2 cross-encoder 模型4.3 bert 架构4.4 bert 池化操作 5. Fid 模型&#xff08;Fusion-in-Decoder&#xff09;6. 多分类损失函数6.1 交叉熵损失6.2 softmax 损失 7. t-sne8. NDCG参考资料 1. KL散度 衡量两…

【开发】JavaWeb开发中如何解析JSON格式数据

目录 前言 JSON 的数据类型 Java 解析 JSON 常用于解析 JSON 的第三方库 Jackson Gson Fastjson 使用 Fastjson Fastjson 的优点 Fastjson 的主要对象 JSON 接口 JSONObject 类 JSONArray 类 前言 1W&#xff1a;什么是JSON&#xff1f; JSON 指 JavaScrip t对象表…

打印前端代码

打印定义 <things-unit-web-print id"web-print" template-name"[[templateName]]" template-data"[[templateData]]"></things-unit-web-print> 模板名称 this.templateName "orderwork01"; 模板参数 this.templateD…

业界主流数据加速技术路线

计算存储分离已经成为云计算的一种发展趋势。在计算存储分离之前&#xff0c;普遍采用的是传统的计算存储相互融合的架构&#xff0c;但是这种架构存在一定的问题&#xff0c;比如在集群扩容的时候会面临计算能力和存储能力相互不匹配的问题。用户在某些情况下只需要扩容计算能…

交流负载箱的特点和优势有哪些?

交流负载箱广泛应用于电力系统、新能源、轨道交通、航空航天等领域。它具有以下特点和优势&#xff1a; 1. 灵活性高&#xff1a;交流负载箱可以根据实际需求&#xff0c;调整输出电流、电压、功率等参数&#xff0c;以满足不同场景下的测试需求。同时&#xff0c;它还可以实现…

代码随想录算法训练营Day42 | LeetCode1049. 最后一块石头的重量 II、LeetCode494. 目标和、LeetCode474.一和零

LeetCode1049. 最后一块石头的重量 II 这道题难点在于如何转换成背包问题&#xff0c;其实和上一题和相等子集合基本一样&#xff0c;尽量把石头分成两个重量相等的集合&#xff0c;那么在碰撞之后和就是最小的&#xff0c;石头的重量也可以当作石头的价值&#xff0c;代码也基…

行为型模式

行为型设计模式是面向对象编程中的一种模式&#xff0c;它关注的是对象之间的通信和协作&#xff0c;以实现特定的行为或任务。这些模式通常涉及到对象之间的消息传递、方法调用和协同工作&#xff0c;以达到更好的灵活性和可维护性。 行为型模式用于描述程序在运行时复杂的流程…

App自动化测试之Appium 环境搭建保姆级教程(全网最全)

前言 APP自动化测试运行环境比较复杂&#xff0c;稍微不注意安装就会失败。我见过不少朋友&#xff0c;装了1个星期&#xff0c;Appium 的运行环境还没有搭好的。 搭建环境本身不是一个有难度的工作&#xff0c;但是 Appium 安装过程中确实存在不少隐藏的比较深的坑&#xff…

低代码平台如何选型 盘点国内外主流低代码开发平台

随着数字化转型的加速&#xff0c;低代码开发平台作为一种新型软件开发方式&#xff0c;受到了广泛关注。国内低代码市场也呈现出蓬勃发展的态势&#xff0c;各种低代码平台如雨后春笋般涌现。本文将对国内低代码平台进行盘点&#xff0c;以帮助企业和开发者更好地了解市场情况…

strstr函数、chdir函数、access函数、strdup函数的介绍

1、strstr函数 strstr 是 C 语言中的一个字符串处理函数&#xff0c;用于在一个字符串中查找子字符串的第一次出现。 函数原型 char *strstr(const char *haystack, const char *needle); haystack&#xff1a;要在其中搜索的字符串。needle&#xff1a;要查找的子字符串。 函…

如何正确选择国外服务器的带宽和线路呢?

国外大带宽服务器是一种提供高带宽、高速网络连接和良好稳定性的服务器&#xff0c;但在中国使用这类服务器可能涉及到违反法律法规的风险。因此我无法为你提供相关帮助。接下来和源库一起了解如何正确选择国外服务器的带宽和线路呢? 考虑目标用户的地理位置。如果目标用户主要…