webview调取相机
来源:互联网 发布:2017年旅游大数据分析 编辑:程序博客网 时间:2024/06/06 00:44
项目中有一个需求:用户购买完商品后评价,可以选择图片。评价的界面是一个web页面。刚开始跟着网上的代码弄完后,在测试机上运行正常,可是他们说自己的手机不行,就去百度了一下,奶奶个球,才发现安卓webview打开本地文件在3x、4x、5x上都不一样。甚至有些说因为安全原因,安卓4.4不支持webview打开本地文件(未验证)。我也是醉了,爱不一样就不一样吧,谁叫俺还要完成任务呢。下面就说说填坑的过程。 首先为了在多个Activity不用写重复的代码,新建一个 MyWebChomeClient 继承自 WebChomeClient
public class MyWebChomeClient extends WebChromeClient { public MyWebChomeClient(OpenFileChooserCallBack openFileChooserCallBack) { }}
其次,写一个接口提供给Activity,让他来处理照片选择的逻辑
public interface OpenFileChooserCallBack { // api低于 5.0 的回调 void openFileChooserCallBack(ValueCallback<Uri> uploadMsg, String acceptType); // api高于 5.0 的回调 boolean openFileChooserCallBackAndroid5(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams);}
接下来为了适配不同版本的安卓,我们在这里添加不同版本webview掉用本地文件系统的方法
//3.0--版本public void openFileChooser(ValueCallback<Uri> uploadMsg){ openFileChooser(uploadMsg, "");}//3.0++版本public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) { mOpenFileChooserCallBack.openFileChooserCallBack(uploadMsg, acceptType);}//4.1.1++版本public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture){ openFileChooser(uploadMsg, acceptType);}//5.0++版本public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) { Log.e("fileChooserParams","fileChooserParams"); mOpenFileChooserCallBack.openFileChooserCallBackAndroid5(webView, filePathCallback, fileChooserParams); return true;}
再来说说Activity:
首先设置webview
mWebView .loadUrl(url);//url为你要加载的urlWebSettings webSettings = mWebView.getSettings();webSettings.setJavaScriptEnabled(true);webSettings.setAllowFileAccess(true);webSettings.setAllowContentAccess(true);webSettings.setBuiltInZoomControls(false);
其次在设置 webview 的 WebChromeClient 为我们新建的 MyWebChomeClient
mWebView.setWebChromeClient(new MyWebChomeClient(this));
在activity中实现MyWebChomeClient中的接口
@Overridepublic void openFileChooserCallBack(ValueCallback<Uri> uploadMsg, String acceptType) { mUploadMsg = uploadMsg; showOptions();}@Overridepublic boolean openFileChooserCallBackAndroid5 (WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) { mUploadMsgForAndroid5 = filePathCallback; showOptions(); return true;}
注:showOptions()方法为你想要的操作
还有就是注意当权限不足,或者其他原因导致返回为空时要设置相应的参数为空,否则将导致webview的等待,其他控件不能点击。
还有很多权限问题的操作本文并未涉,如果有需要可以去下载 demo 查看
这就是webview调用本地相机,相册的方法,当然,调用本地文件也一样。
0 0
- webview调取相机
- 调取系统相机
- 调取相机--------头像拍照
- 调取微信相册相机
- iOS11 调取相册相机问题
- iOS iO10 调取本地相册,相机
- Android中调取系统相机和相册功能
- iOS 调取本地相册/相机,剪裁图片进行头像上传
- iOS 调取iPhone本地相册和开启相机
- Android 7.0 调取系统相机崩溃解决android.os.FileUriExposedException
- 调取微信相机相册中的图片>发送
- 微信开发 调取相机兼容苹果手机
- Vue.js 使用cordova camera插件调取相机
- Android 7.0 调取相机崩溃 android.os.FileUriExposedException
- Unity 与android交互调取相机拍摄图片有片刻黑屏的现象
- Android调取系统相册和相机照片设置到ImageView并上传到服务器
- Android调取系统相册相机并进行裁剪,兼容到6.0
- 【适配整理】Android 7.0 调取系统相机崩溃解决android.os.FileUriExposedException
- 关于OC的autorelease
- 20命令模式
- 关于ios7 使用 GDataXml 解析 xml 数据的问题。
- asp.net 控件赋值的问题
- A1034. 孪生素数对
- webview调取相机
- 21访问者模式
- java中接口内的匿名内部类
- 22责任链模式
- Android Textview 点击之后更换背景 保持不变
- Python抢火车票成功后发送邮件
- 聊天界面返回到聊天列表如何设计
- uinavigationcontroller导航获取上级view出现unrecognized selector错误
- codeforces Good Bye 2016-C New Year and Rating(二分)