前言
现在分享功能一般是app的常用功能了,在开发分享功能时,我们常常使用的是集成友盟或者ShareSDK第三方工具包或者使用官方的分享方法,但是这些多多少少会出现一些弊端。如下:
- 不需要那么多的分享功能,jar包过大,导致app体积变大
- 第三方工具包往往会收集一些用户数据,还有一些网络请求
- 第三方也会制定自己的规则,有时候功能不能满足产品的特殊需求
- 直接使用官方分享代码的话,代码过于松散,使用不方便,不易维护
思考怎么解决问题呢?
既然第三方的工具类使用方便,官方代码松散。其实第三方的工具包也是封装的官方分享的代码,那我们不妨自己也封装一个符合自己项目,一个更加轻量级且使用方便的纯绿色、无污染、无添加剂的工具呢?那下面就开始介绍自定义封装的姿势了。
分享使用的姿势

没错,就是你喜欢的链式调用,几行代码搞定,是不是so easy,so happy呢?
一. 准备工作
1. 添加微信OpenSdk的依赖 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:1.4.0'。
2. 创建一个分享平台的枚举类,这里只列出了微信朋友圈和微信好友的,如需更多,可以自己新增。

使用枚举的好处:规定了传入值的范围,避免传入规定不需要的值,将错误停留在编译期的检查。如果用int型常量表示的话,那么这个参数只要是int类型的,编译即可通过,增加了bug的可能性。
3. 创建一个分享类型的抽象基类,分享图片、分享网页都继承该类,方便调用时使用多态。

4. 创建分享图片类和分享网页类分别继承ShareObject类


二. 封装ShareAPI,提供内部实现功能的方法,调用微信官方的分享方法,这是实现功能的核心类。



三. 提供给外层设置和调用的方法,通过share()方法触发分享动作

四. 使用单例模式,拿到之前设置的ShareListener对象,完成分享回调类和ShareListener之间的通信
分享出去后,我们需要接收到微信分享的回调,才能做相关的业务处理操作。因为微信分享需要在一个指定的WXEntryActivity类里面接收到回调消息,而有时候我们要通过文章id来做一些相关的业务处理,这时候就需要实现两个Activity之间的通信,这里我提供的方式是通过单例去实现通信


五. 接下来就可以直接分享使用了
直接使用开始介绍的那个分享姿势就可以完成分享了。
六.最后
下面附上源代码:github.com/xuerui1993/… 。 由于本人能力有限,如有什么用的不当的地方,请大家见谅和指正。