摘要:换个角度看问题,可以节省你大量时间,提高你的效率。这边使用的手机为三星,以这个手机为例。在系统三星浏览器上点击,马上弹出权限申请因此解决方法之一是点击就申请权限。可以换个角度看问题,不要钻牛角尖。
背景换个角度看问题,可以节省你大量时间,提高你的效率。
公司开发的一个 app,有用户反馈在打开网页点击上传图片按钮时,点击拍照不能唤起系统相机。还说在 Android 6.0 以上手机可以,以下不行。
听到这里,我大概知道应该是权限问题了。
更多关于权限的可以看下我这篇文章 android开发之调皮的权限。
解决之路既然知道是权限问题,那么问题就简单了,在选择系统相机的时候申请权限就可以了。
然而事实是:
在说明踩坑之路之前我们先说下储备知识。
储备知识1.需要一个页面。
代码如下,可以直接保存到记事本,然后修改文件名即可。
页面内容很简单,就是一个文件上传按钮,支持图片文件上传。
2.需要一个 Android Demo。
这个 Demo 有一个页面,页面里面就有一个 WebView。
开发过 Android WebView 的都知道,Android 上传文件对于不同的系统做法不一样。
我们这里以 Android 5.0 的文件上传为例。
webview.setWebChromeClient(new WebChromeClient() { // For Android >= 5.0 @Override public boolean onShowFileChooser(WebView webView, ValueCallbackfilePathCallback, WebChromeClient.FileChooserParams fileChooserParams) { //TODO call system intent return true; } });
相信大家对于上面代码并不陌生。
我们就是需要在 TODO 里面调用系统相机和系统相册等 Intent。
调用后大概效果如下:
好了,到了这里就可以开始说下踩坑之路了。
希望知道上面点击的是相机还是文档。
为什么需要知道这个呢?
因为一般 App 启动的时候默认会申请存储权限。
所以假设用户点击文档,那么是不需要申请相机权限的。
因此我们需要做到当用户点击相机的时候才去申请权限。
所以基于这一点,开始网络查找资料,陷入坑中。
比如:
Intent.ACTION_CHOOSER 与 Intent.ACTION_PICK_ACTIVITY。
当然关于 Intent.ACTION_PICK_ACTIVITY 的例子很少,最后这边弃用了。
再比如:
通过 createChooser(Intent target, CharSequence title, IntentSender sender) 的第三个参数 IntentSender 来判断。
这个也是觉得很复杂,成本较高,不太合适。
那到底应该怎么处理呢?
这个时候就不要死磕这一点了,而是要站在巨人的肩膀上。
WebView 说到底也可以看成是一个精简版的浏览器,因此我们完全可以参考下浏览器的做法。
这边使用的手机为三星 S7,以这个手机为例。
在系统三星浏览器上点击,马上弹出权限申请
因此解决方法之一是点击就申请权限。
在 UC 浏览器上点击,弹出如下框( PS:可能一打开文件进入会提示出错,再打开即可):
只有在点击相机拍照才会去申请权限,是不是更好,权限申请更严格。
不过实际测试发现了一个 BUG。
就是权限申请如果拒绝,再次点击页面无响应。
估计 UC 浏览器在权限拒绝之后忘记做清理工作了。
通过参考其他浏览器的实现,相信对你来说解决这个问题是没太多难度的。
从这个事件,我们可以发现,我们很多时候不需要做第一个吃螃蟹的人。
可以换个角度看问题,不要钻牛角尖。
毕竟公司分配给你任务,是有一个时间的。
不是让你去做研究的。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/2994.html
摘要:随之,网景公司也提出了自己的解决方式,正好与大相反有可能这哥俩谁都不服,专门对着干,它提出了事件捕获的理论,也就是从外向内直至触发元素,依次触发事件。 一说到IE我想很多web小伙伴都避之不及,对于IE经验不足的同学可以说更是恨之入骨,撕心裂肺般的烦恼与气愤?,被折磨的不要不要的。我感同身受,去年的我的生日愿望就是,我希望IE浏览器在这世界上没有一个用户。 这篇文章是一个追溯历史并收集...
摘要:随之,网景公司也提出了自己的解决方式,正好与大相反有可能这哥俩谁都不服,专门对着干,它提出了事件捕获的理论,也就是从外向内直至触发元素,依次触发事件。 一说到IE我想很多web小伙伴都避之不及,对于IE经验不足的同学可以说更是恨之入骨,撕心裂肺般的烦恼与气愤?,被折磨的不要不要的。我感同身受,去年的我的生日愿望就是,我希望IE浏览器在这世界上没有一个用户。 这篇文章是一个追溯历史并收集...
摘要:随之,网景公司也提出了自己的解决方式,正好与大相反有可能这哥俩谁都不服,专门对着干,它提出了事件捕获的理论,也就是从外向内直至触发元素,依次触发事件。 一说到IE我想很多web小伙伴都避之不及,对于IE经验不足的同学可以说更是恨之入骨,撕心裂肺般的烦恼与气愤?,被折磨的不要不要的。我感同身受,去年的我的生日愿望就是,我希望IE浏览器在这世界上没有一个用户。 这篇文章是一个追溯历史并收集...
摘要:对于一个应用工作负载复杂业务覆盖类型广泛的企业来说,集中式与分布式不再是非此即彼的选择。为此,也可以看到,针对分布式与集中式架构的发展特点,也与时俱进,试图在分布式和集中式架构之间构建一个和谐共处的方案。看着某云本月初又出现一波宕机故障,不免让我想起了一个业界讨论已久的问题:分布式与集中式,这两种架构到底谁最好?云计算的发展,让分布式架构大有看头,也风靡一时。曾几何时,集中式架构也似乎备受争...
摘要:要求能够显示最后一个完整的标签。搜索解决方式时一直关注的是失效,而没有想过是因为使用了的影响。这个属性存在兼容性问题。在解决问题的过程中,发现了另一种解决办法,在父元素上添加。 2018-08-03 Questions about work 这几天开发的时候遇到了个问题,如图1。 写了个demo demo 地址 由于页面并没有进行整体缩放,导致在小屏幕手机上显示会有异常。PM要求能够显...
阅读 1260·2021-10-14 09:43
阅读 863·2021-09-10 10:51
阅读 1272·2021-09-01 10:42
阅读 2011·2019-08-30 15:55
阅读 409·2019-08-30 15:55
阅读 2203·2019-08-30 14:21
阅读 1558·2019-08-30 13:04
阅读 3343·2019-08-29 13:09