三、长图分享
一般我们向各个社交平台上发送的图片都比较小,最大年夜也就是手机屏幕大年夜小的图片,再大年夜的就不多见了。然则也有例外,比如微博的长图、锤子便签的长图等等,如不雅直接将这些图片经由过程微信分享 SDK 或者微博分享 SDK 分享出去,就会发明图片根本上都是模糊的,然则将图片发送给 iPhone 手机就可以正常查看,我们只能哀叹 Android 版微信不给力。
微信 SDK 不给力,然则产品体验照样不克不及丢,怎么办呢?办法照样有的,我们都知道除了各个社交平台本身的分享 SDK ,体系供给了原生分享筹划,本质上就是社交平台把目标 Activity 对外裸露了出来,然后第三方 App 就可以根据事先定义好的 Intent 跳转规矩唤起社交平台,同时完成数据传输和展示。
似乎问题可以完美解决了,然则照样有坑须要接着踩。在 Android 7.0 及以上的版本体系限制了 Intent 传输 file:// 开首的数据,这也就限制了体系原生分享单图,怎么办呢?两种筹划,一种是在 7.0 及以上版本上应用微信等分享 SDK ,接收分享图片模糊的近况,另一种是经由过程反射跳过体系对以 file:// 开首文件在 Intent 中传输的限制,然则这种方法会有风险,毕竟我们不知道将来 Android 会做出什么调剂。以下是跳过体系限制的代码片段,供参考。
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- try {
- Method ddfu = StrictMode.class.getDeclaredMethod("disableDeathOnFileUriExposure");
- ddfu.invoke(null);
- } catch (Exception e) {
- }
- }
当 ContentObserver 监听到媒体数据库的数据改变, 在稀有据改变时获取最后插入数据库的一条图片数据, 如不雅相符以下规矩, 则认为截屏了:
- 时光断定:平日截屏生成后会立马存入体系多媒体数据库,也就是说监听到数据库变更的时光与截图生成的时光不会相差太多,这里推荐以10秒作为阈值,当然这个也是经验值。
- 尺寸断定:截屏顾名思义取得是当前手机屏幕尺寸大年夜小的图片,所以图片宽高大年夜于屏幕宽高的肯定都不是截图产生的。
- 路径断定:因为各手机厂家存放截图的文件路径都不太一样,国内幕况可能会更严重,然则平日图片保存路径都邑包含一些常见的关键词,比如 “screenshot”、 “screencapture” 、 “screencap” 、 “截图”、 “截屏”等,每次都检查图片路径信息是否包含这些关键词。
至此根本上可以知足随便率性图片大年夜小的分享了。此外经由验证还发明微信分享 Android 版 SDK 对缩略图和分享图的大年夜小都有限制,官方给的指导看法是缩略图小于 32K ,分享图片小于 10M 即可正常分享,然则实验下来这两个值都是理论上限,不要太接近这个上限,如不雅图片太大年夜,缩略图和分享图都邑出现模糊的情况,甚至无法正常分享,当然对于经由过程体系分享的话就不存在这个限制,图片也比较清楚。
除了图片大年夜小有限制,缩略图的尺寸也是有限制的,这一点官方文档并没有给出,实验结不雅显示图片尺寸小于等于120×120是比较安然典范围,分享都没有问题。
四、小结
截屏监听、 WebView 生成长图以及长图分享都是我们团队之前不曾碰到过的营业需求,在知足产品营业需求的同时,也踩了很多坑,积聚了一些经验,特此总结。
注:在 Android 6.0 及以上版本须要动态申请权限
【编辑推荐】
- 关于Android模块化我有一些话不知当讲欠妥讲
- Android开辟者自述:为什愦我要改用Kotlin?
- 用Kotlin优雅地开辟Android应用
- HTTPS 道理浅析及其在 Android 中的应用
- 【拭魅战】Android Data Binding大年夜抵触到爱不释手
注:X5 内核生成的长图清楚度比原生 WebView 要差一些,今朝还没有太好的解决筹划。
推荐阅读
赓续增长的存储需求促使很多企业转向云计算。云计算是新实际,但确保云存储在安然,机能和可扩大性方面获得恰当构建也至关重要。 云计算响应筹划成“大年夜杂烩”怎么办?分析机构>>>详细阅读
本文标题:Android截屏与WebView长图分享经验总结
地址:http://www.17bianji.com/lsqh/35456.html
1/2 1