Android WebView支付失败和调用系统相册和上传图片、按钮不可点击等问题
发布日期:2021-07-01 00:00:06
浏览次数:2
分类:技术文章
本文共 5413 字,大约阅读时间需要 18 分钟。
前言
一直以为webView就是加载个链接如此简单 原来webView中需要处理的问题也有很多 下面我们来看下webView中各种遇到的问题和解决方法
微信 支付宝支付调用失败
如果webView调用支付失败 可以将url拦截 对url做出判断 重新打开rul 如下代码:
mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //对url做出判断 if (url.startsWith("http:") || url.startsWith("https:")) { return false; } try { //重新加载url Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent); } catch (Exception e) { Log.e(TAG, " Exception is ==== >>> " + e); } return true; } });
调用系统相册并上传图片
// 不同方式的请求码 public static final int REQUEST_SELECT_FILE = 100; public final static int FILECHOOSER_RESULTCODE = 1; // 接收安卓5.0以上的 public ValueCallbackuploadMessage; //接收5.0以下的 private ValueCallback mUploadMessage; //设置支持调用相册 mWebView.setWebChromeClient(new WebChromeClient() { // Android 3.0+ public void openFileChooser(ValueCallback uploadMsg) { mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); startActivityForResult(Intent.createChooser(i, "File Chooser"),FILECHOOSER_RESULTCODE); } // Android 3.0+ public void openFileChooser(ValueCallback uploadMsg,String acceptType) { mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("*/*"); startActivityForResult(Intent.createChooser(i, "File Browser"), ProxyActivity.FILECHOOSER_RESULTCODE); } // Android 4.1+ 会调用这个 public void openFileChooser(ValueCallback uploadMsg,String acceptType, String capture) { mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); startActivityForResult( Intent.createChooser(i, "File Chooser"),ProxyActivity.FILECHOOSER_RESULTCODE); } //Android 5.0会调用这个 @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) { //确保没有现有的消息 if (uploadMessage != null) { uploadMessage.onReceiveValue(null); uploadMessage = null; } uploadMessage = filePathCallback; Intent intent = fileChooserParams.createIntent(); startActivityForResult(intent, REQUEST_SELECT_FILE); return true; } }); //将选中的图片结果带回 @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Override protected void onActivityResult(int requestCode, int resultCode,Intent intent) { super.onActivityResult(requestCode, resultCode, intent); if (requestCode == FILECHOOSER_RESULTCODE && resultCode == RESULT_OK) { Uri uri = intent.getData(); Log.e("tag", "图片数据:" + uri.toString()); //将图片显示到webView mUploadMessage.onReceiveValue(intent.getData()); mUploadMessage = null; } else if (requestCode == REQUEST_SELECT_FILE) { if (uploadMessage == null) return; uploadMessage.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, intent)); uploadMessage = null; } } @Override protected void onResume() { super.onResume(); mWebView.onResume(); if (mUploadMessage != null) { //取消之后要告诉WebView不要再等待返回结果, 设置为空就等于重置了状态,也是避免只能选择一次图片的原因 mUploadMessage.onReceiveValue(null); mUploadMessage = null; } }
按钮不可点击
//解决webview加载的网页上的按钮点击失效 以及有些图标显示不出来的问题 WebSettings webSettings = mWebView.getSettings(); //下面这2句代码是关键 解决按钮点击失效 mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new WebViewClient());
WebView返回键处理
//点击回退按钮不是退出应用程序,而是返回上一个页面 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) { mWebView.goBack(); return true; } return super.onKeyDown(keyCode, event); }
销毁
@Override protected void onDestroy() { if (mWebView != null) { final ViewGroup viewGroup = (ViewGroup) mWebView.getParent(); if (viewGroup != null) { viewGroup.removeView(mWebView); } mWebView.destroy(); } super.onDestroy(); mUnbinder.unbind(); }
总结
WebView实用性很强 需要熟悉各种用法 还是得多多练习 WebView是android中一个非常重要的控件,它的作用是用来展示一个web页面。 它使用的内核是webkit引擎,4.4版本之后,直接使用Chrome作为内置网页浏览器。 了解更多请参考
共勉
我要一步一步往上爬
在最高点乘着叶片往前飞 任风吹干流过的泪和汗 我要一步一步往上爬 等待阳光静静看着它的脸 小小的天有大大的梦想 我有属于我的天 任风吹干流过的泪和汗 总有一天我有属于我的天
转载地址:https://lvshichunqiu.blog.csdn.net/article/details/107879964 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月25日 13时55分09秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
java多线程-(无锁)CAS算法基础
2019-05-01
commons-csv的基本操作
2019-05-01
java 多线程之Exchanger
2019-05-01
java 多线程之Future与FutureTask
2019-05-01
rocketmq(broker配置参数设置)不断更新中
2019-05-01
rocketMQ实战(四): hello world
2019-05-01
GB28181计算注册登陆时的鉴权信息
2019-05-01
人工智能为什么这么火?看看安防江湖30年血战就知道了
2019-05-01
“前端智能为安防产生新的数据价值”
2021-07-04
nanomsg编译与测试
2021-07-04
(2)CMake入门笔记--CMake官网教程
2021-07-04
(3)CMake入门笔记--CMake官网教程
2021-07-04
(4)CMake入门笔记--CMake官网教程
2021-07-04
(XWZ)的python学习笔记Ⅰ
2019-05-01
(XWZ)的Python学习笔记Ⅱ------面向对象编程
2019-05-01
(XWZ)的Python学习笔记Ⅲ——面向对象高级编程
2019-05-01
(XWZ)的python学习笔记Ⅳ——错误、调试和测试
2019-05-01
(XWZ)的Python学习笔记Ⅴ——I/O编程
2019-05-01
(XWZ)的python学习笔记Ⅶ——正则表达式
2019-05-01
(XWZ)的Python学习笔记Ⅷ--------numpy
2019-05-01