一、需要实现的功能:

用H5实现的App中需要在H5获取手机中的照片或者视频文件上传到服务器。

二、分析实现方法:

由于不懂前端开发,不知道H5中有 input file之类的标签控件,可以用来选择文件,刚开始的思路还是想着native 端是否要通过提供inputstream流方式,将文件内容传递给JS。后来和前端沟通之后,H5在电脑端都是用input 设置type为 file 来实现文件选择功能,于是才开始搜索资料,发现时需要在webview中设置  setWebChromeClient ,其中有对input 的响应回调:

三、具体实现:

前端代码

native端代码:

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)

@Override

public boolean onShowFileChooser(WebView webView,

ValueCallback filePathCallback,

WebChromeClient.FileChooserParams fileChooserParams) {

mFilePathCallbacks = filePathCallback;

// TODO: 根据标签中得接收类型,启动对应的文件类型选择器

String[] acceptTypes = fileChooserParams.getAcceptTypes();

for (String type : acceptTypes) {

Log.d(TAG, "acceptTypes=" + type);

}

// 针对拍照后马上进入上传状态处理

if ((acceptTypes.length > 0) && acceptTypes[0].equals("image/example")) {

Log.d(TAG, "onShowFileChooser takePhoto");

Intent it = CameraFunction.takePhoto(mContext);

startActivityForResult(it, TAKE_PHOTO_AND_UPLOAD_REQUEST);

return true;

}

// 针对录像后马上进入上传状态处理

if ((acceptTypes.length > 0) && acceptTypes[0].equals("video/example")) {

Log.d(TAG, "onShowFileChooser record video");

Intent it = CameraFunction.recordVideo(mContext);

startActivityForResult(it, RECORD_VIDEO_AND_UPLOAD_REQUEST);

return true;

}

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

intent.addCategory(Intent.CATEGORY_OPENABLE);

if (acceptTypes.length > 0) {

if (acceptTypes[0].contains("image")) {

intent.setType("image/*");

} else if (acceptTypes[0].contains("video")) {

intent.setType("video/*");

} else {

intent.setType("*/*");

}

} else {

intent.setType("*/*");

}

WebViewActivity.this.startActivityForResult(Intent.createChooser(intent, "File Chooser"),

REQUEST_FILE_PICKER);

return true;

}

回调设置uri

/**

* 设置input 标签出发的回调选择文件路径,优先使用path参数,

* 其次使用uri参数

* @param uriParam

* @param pathParam

*/

private void setFilePathCallback(Uri uriParam, String pathParam) {

//都为空,则设置null

if (uriParam == null && pathParam == null) {

if (mFilePathCallback != null) {

mFilePathCallback.onReceiveValue(null);

}

if (mFilePathCallbacks != null) {

mFilePathCallbacks.onReceiveValue(null);

}

} else if (null != pathParam) { // 优先使用path

if (mFilePathCallback != null) {

Uri uri = Uri.fromFile(new File(pathParam));

mFilePathCallback.onReceiveValue(uri);

}

if (mFilePathCallbacks != null) {

Uri uri = Uri.fromFile(new File(pathParam));

mFilePathCallbacks.onReceiveValue(new Uri[] { uri });

}

} else if (null != uriParam) { //其次使用uri

if (mFilePathCallback != null) {

String path = UriUtils.getPath(getApplicationContext(), uriParam);

Uri uri = Uri.fromFile(new File(path));

mFilePathCallback.onReceiveValue(uri);

}

if (mFilePathCallbacks != null) {

String path = UriUtils.getPath(getApplicationContext(), uriParam);

Uri uri = Uri.fromFile(new File(path));

mFilePathCallbacks.onReceiveValue(new Uri[] { uri });

}

}

mFilePathCallback = null;

mFilePathCallbacks = null;

}

针对各个请求场景进行处理:

public void onActivityResult(int requestCode, int resultCode, Intent intent) {

总结:既然用H5开发APP,就需要了解前端,不懂就要问了。查询方向要对,否则南辕北辙,方向有时候比努力重要!

到此这篇关于关于webview适配H5上传照片或者视频文件的方法的文章就介绍到这了,更多相关webview适配H5上传照片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章,希望大家以后多多支持脚本之家!

h5 android上传本地视频文件,关于webview适配H5上传照片或者视频文件的方法相关推荐

  1. HTML点击上传本地图片到页面 并在页面上显示上传的图片 以及遇到的问题

    <div class="col-md-5"><img id="img-avatar" src="../images/index/us ...

  2. Android webView适配H5暗黑模式

    第一步 首先Android 必须是Q 就是10.0才能支持暗黑模式 第二步 设置Android webView暗黑模式 WebViewFeature必须引入这个包 implementation 'an ...

  3. android 视频做背景图片,视频后面怎么加背景图片?安卓手机给视频添加背景图片的方法...

    狸窝是帮助用户解决问题 提供教程解决方案 在这个过程中有使用我们自己开发的软件 也有网上找的工具 只要帮助用户解决问题就好!同意则往下继续了解学习 ... 注意此教程方案是:『安卓手机端教程方案』.很 ...

  4. 三星电视与android手机图片,将三星手机照片和视频传输到计算机的4种方法

    全新三星Galaxy S9智能手机曾被称为是性能最强大.功能最齐全的智能手机之一,因此而备受很多用户的青睐.但是,当涉及到将高清媒体(尤其手机照片和视频)从新手机传输到计算机时,却需要注意不要误入一些 ...

  5. 利用文件时间批量重命名照片和视频

    问题描述 承接上节的问题,在安卓和苹果间互导照片和视频还容易出现文件名混乱的问题,如下图所示. 代码实现 为保证文件名的准确性,这里主要提取照片的拍摄时间和视频的修改时间用于重命名,这两个时间一般是其 ...

  6. python批量改名微信视频软件,python利用文件时间批量重命名照片和视频

    本文实例为大家分享了python利用文件时间批量重命名照片和视频的具体代码,供大家参考,具体内容如下 问题描述 承接上节的问题,在安卓和苹果间互导照片和视频还容易出现文件名混乱的问题,如下图所示. 代 ...

  7. html怎么把字放在图片上而不把图片设为背景音乐,左边是图片一直在替换,右边显示文字内容并配乐的视频怎么制作?照片制作视频软件...

    小编前段时间看到一个视频蛮有趣的,视频画面左边是几张图片添加了过渡效果切换着播放,右侧则是文字内容,整个视频配有好听的背景音乐.小编之前也就知道在视频的左侧放一张图片右侧加文字并配上背景音乐,这设置了 ...

  8. android 自己调用系统相机保存的照片存到自定义文件夹里面用电脑看该照片显示0KB或者是无法查看?或者说用手机助手导出照片导出失败?

    哈哈,标题有点长,之所以这样是为了能让遇到同样问题的人方便搜索到,我自己就遇到这样的问题一直搜索不到. 我先讲一下自己遇到的问题:因为我的app有需求要拍照并且保存起来,然后我为了方便用户去相册统一查 ...

  9. 怎样快速把照片做成视频?简单3步,就能拥有爆款效果!

    大家越来越热衷用照片记录下美好的瞬间,无论是旅游还是毕业,无论是宝宝相册还是婚礼纪念,各式各样的丰富生活都值得被记录下来.但是现在是短视频娱乐的时代,如果能够把照片做成视频,不仅能让照片以更加美观和时 ...

  10. 智能锁百问百答视频锁篇第4期:特斯拉线圈能破解视频锁吗?平台能看到视频锁用户存储的录像吗?化妆、戴眼镜能打开人脸视频锁吗

    21.特斯拉线圈能破解视频锁吗? 2018年,智能锁行业高速发展,市场上出现了一种可以暴力破解智能锁的装置,也就是特斯拉线圈,俗称"小黑盒",它用极高的电压形成强磁场,产生强电子脉 ...

最新文章

  1. 17个Python的骚操作,你都OK吗?
  2. paperclip的id partition功能还是相当的给力,省得我们实现了,这个功能之前连想都没想到,...
  3. linux下如何查询jdk的安装路径
  4. PHP在金山游戏运营中的应用
  5. 智能优化算法:黏菌优化算法 - 附代码
  6. u8 附件上传后存放路径_用友U8生产不良退料案例教程
  7. Ubuntu18.04 下载与安装(阿里云官方镜像站)
  8. java poi设置导出的excel带下拉
  9. 设计模式--依赖倒转原则
  10. java useragent 360 遨游 火狐_Chrome与火狐修改浏览器User Agent教程
  11. java毕业设计—— 基于java+JSP+SSH的婴幼儿产品销售系统设计与实现(毕业论文+程序源码)——婴幼儿产品销售系统
  12. 新手小白搭建服务器环境如何选择呢?lnmp还是lamp?
  13. vue3+echart5 遇到的报错:Cannot read properties of undefined (reading ‘type‘)
  14. [YOLOv7]基于YOLO&Deepsort的交通车流量统计系统(源码&部署教程)
  15. JS中怎样使用Date对象加减日期
  16. 陌上红尘,只影向谁依
  17. 动态规划范例——驿站马车问题
  18. Pycharm永久激活七步走
  19. Android动态壁纸解析
  20. zookeeper开源客户端Curator介绍(六)

热门文章

  1. 2018年全国大学生电子设计竞赛
  2. 教你如何使用github+jsDelivr搭建免费图床
  3. 在日软件工程师的远虑近忧
  4. Day3:MVP+ButterKnife+Dagger2的使用
  5. 解决VS停止调试时浏览器自动关闭关闭浏览器时自动停止调试
  6. 计算机如何添加打印机图标,如何添加打印机设备到电脑
  7. 如何用计算机名安装打印机,如何添加打印机,教您添加共享打印机的方法
  8. 制作自己的印章,和自己的爱人表白纪念!
  9. 《Adobe Photoshop CS4中文版经典教程》目录—导读
  10. 淘宝评论爬取 python pandas