快两个月没写博客了,真是惭愧,一个好习惯想要一直坚持下去真的不是一件容易的事情,赶快回到正轨,把自己的一点点经验总结出来,继续写下去。
最近项目要用到分享的功能,这几乎是每一个app都有的功能,分享一些链接和一些其它信息到各大平台以扩大自己应用的知名度。而有许多公司在专门做分享平台包括:友盟和ShareSDK等,使用这些平台去分享只需调用第三方分享平台的统一API而不必再分别处理不同平台的不同接口了,在此我使用了ShareSDK这个第三方的平台。
ShareSDK平台的分享API已经封装的非常的简单了,基本可以做到十几行代码就可实现指定平台的分享。但考虑到代码的复用性,自己对ShareSDK的底层API进行再次的封装,与业务逻辑彻底隔离,这样就可以达到复用了。
思路:1.每个不同的平台实现自己平台独有的分享逻辑。2.创建一个Manager类去管理所有的平台。3.应用层调用Manager的分享入口方法即可,具体的分享功能由Manager类分发到不同的分享平台去即可。
实现了这三步以后,应用层就与具体的分享完全隔离开来,以后再有分享功能则直接copy步骤1和2创建好的类即可。
下面看基于ShareSDK的封装代码如下:
由于我们使用了ShareSDK,针对不同的平台的不同的分享逻辑则暂且不用我们去实现了,ShareSDK平台已经为我们封装好了,第二步,则是我们自己的Manager平台去管理各个不同的分享平台。代码如下:
package customshare;/*** @author rzq* @function 分享功能统一入口,负责发送数据到指定平台*/
public class ShareManager {/*** 应用程序上下文*/private Context mContext;private Platform mCurrentPlatform;/*** 第一个执行的方法* * @param context*/public static void initSDK(Context context) {ShareSDK.initSDK(context);}/*** 分享数据到不同平台*/public void shareData(ShareData shareData, PlatformActionListener listener) {switch (shareData.mPlatformType) {case QQ:mCurrentPlatform = ShareSDK.getPlatform(QQ.NAME);break;case QZone:mCurrentPlatform = ShareSDK.getPlatform(QZone.NAME);break;case WeChat:mCurrentPlatform = ShareSDK.getPlatform(Wechat.NAME);break;case WechatMoments:mCurrentPlatform = ShareSDK.getPlatform(WechatMoments.NAME);break;case WechatFavorite:mCurrentPlatform = ShareSDK.getPlatform(WechatFavorite.NAME);break;case SMS:mCurrentPlatform = ShareSDK.getPlatform(ShortMessage.NAME);break;case Email:mCurrentPlatform = ShareSDK.getPlatform(Email.NAME);break;case TencentWeibo:mCurrentPlatform = ShareSDK.getPlatform(TencentWeibo.NAME);break;default:break;}mCurrentPlatform.setPlatformActionListener(listener);mCurrentPlatform.share(shareData.mShareParams);}/*** 第三方用户登陆应用统一入口,* * @param type*            第三方类型* @param listener*            事件回调处理*/public void loginEntry(PlatofrmType type, PlatformActionListener listener) {switch (type) {case QQ:case QZone:mCurrentPlatform = ShareSDK.getPlatform(QQ.NAME);break;default:break;}mCurrentPlatform.SSOSetting(false);mCurrentPlatform.showUser(null); // 请求用户信息}/*** @author 应用程序需要的平台*/public enum PlatofrmType {QQ, QZone, TencentWeibo, WeChat, WechatFavorite, WechatMoments, SMS, Email;}
}

第三步,编写应用层代码,应用层只能与我们的分享Manager类去交互。

package com.rzqshare;public class MainActivity extends Activity implements OnClickListener, PlatformActionListener
{private Button mQQButton;private Button mQZoneButton;private Button mWeChatFriend;private Button mSmsView;private Button mEmailView;private Button mTecentWeiBoView;private ShareManager shareManager;private ShareData mData;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView(){mQQButton = (Button) findViewById(R.id.qq_view);mQZoneButton = (Button) findViewById(R.id.qzone_view);mWeChatFriend = (Button) findViewById(R.id.wechat_view);mSmsView = (Button) findViewById(R.id.sms_view);mEmailView = (Button) findViewById(R.id.email_view);mTecentWeiBoView = (Button) findViewById(R.id.tecent_weibo_view);mQQButton.setOnClickListener(this);mQZoneButton.setOnClickListener(this);mWeChatFriend.setOnClickListener(this);mSmsView.setOnClickListener(this);mEmailView.setOnClickListener(this);mTecentWeiBoView.setOnClickListener(this);shareManager = new ShareManager();}@Overridepublic void onClick(View v){mData = new ShareData();switch (v.getId()){case R.id.qq_view:ShareParams params = new ShareParams();params.setText("QQ文本");mData.mPlatformType = PlatofrmType.QQ;mData.mShareParams = params;break;case R.id.qzone_view:ShareParams params2 = new ShareParams();params2.setText(getString(R.string.app));params2.setTitle("测试分享的标题");// params2.setTitleUrl("www.sharesdk.cn");params2.setTitleUrl(getString(R.string.baidu));mData.mPlatformType = PlatofrmType.QZone;mData.mShareParams = params2;break;case R.id.wechat_view:ShareParams params3 = new ShareParams();params3.setShareType(Platform.SHARE_IMAGE);params3.setTitle("朋友圈文本");params3.setImagePath(Environment.getExternalStorageDirectory() + "/1.jpg");mData.mPlatformType = PlatofrmType.WechatFavorite;mData.mShareParams = params3;break;case R.id.email_view:ShareParams params5 = new ShareParams();// params4.setShareType(Platform.SHARE_IMAGE);params5.setAddress("277451977@qq.com");params5.setTitle("邮件文本");params5.setText("我要分享的内容。");params5.setImagePath(Environment.getExternalStorageDirectory() + "/1.jpg");mData.mPlatformType = PlatofrmType.Email;mData.mShareParams = params5;break;case R.id.sms_view:ShareParams params4 = new ShareParams();// params4.setShareType(Platform.SHARE_IMAGE);params4.setAddress("18911230100");params4.setTitle("短信文本");params4.setText("我要分享的内容。");params4.setImagePath(Environment.getExternalStorageDirectory() + "/1.jpg");mData.mPlatformType = PlatofrmType.SMS;mData.mShareParams = params4;break;case R.id.tecent_weibo_view:ShareParams params51 = new ShareParams();// params4.setShareType(Platform.SHARE_IMAGE);// params51.setAddress("18911230100");// params51.setTitle("短信文本");params51.setText("我要分享的内容。");params51.setImagePath(Environment.getExternalStorageDirectory() + "/1.jpg");mData.mPlatformType = PlatofrmType.TencentWeibo;mData.mShareParams = params51;break;}/*** 需要一个对话框阻止用户多次操作,因为此处可能是一个异步状态*/shareManager.shareData(mData, this);}@Overridepublic void onCancel(Platform arg0, int arg1){Log.e("------------->", "cancel");}@Overridepublic void onComplete(Platform arg0, int arg1, HashMap<String, Object> arg2){Log.e("------------->", arg0.getName() + "arg1:" + arg1);}@Overridepublic void onError(Platform arg0, int arg1, Throwable arg2){Log.e("----->onError", arg2.getMessage());}}

总结:
应用层代码随便写的,没有进行代码优化。这样即使我们不想使用ShareSDK了,也可以自己去实现不同平台的分享逻辑,替换到Manager 类中即可。可扩展性也非常的好,而应用层则完全不需要知道底层到底是使用的ShareSDK,或是友盟,还是我们自己去写的平台分享代码。
最后,本文主要是讲如何封装一个与业务无关的可利用的分享组件,具体对平台本身的问题还是到官网去查看文档。


Demo下载地址: https://github.com/qndroid/ShareSDKDemo.git

android分享数据到不同平台组件化相关推荐

  1. android组件化开发视频教程,教你打造一个Android组件化开发框架

    作者简介 本篇来自 lucky_billy 的投稿,分享了他的开源组件化框架,详细地讲解框架形成的思路,希望对大家有所帮助. lucky_billy 的博客地址: 解读开源框架设计思想 B站学习视频 ...

  2. 单独组件_阿里P8年薪百万大牛-教你打造一个Android组件化开发框架

    作者简介 本篇来自 lucky_billy 的投稿,分享了他的开源组件化框架,详细地讲解框架形成的思路,希望对大家有所帮助. lucky_billy 的博客地址: http://blog.csdn.n ...

  3. 【Android 组件化】为什么能极大提高工程编译速度?

    为什么需要组件化 极大提高工程编译速度 业务模块解耦,有利于多人团队协作开发 什么是组件化 所谓的组件化就是把需求拆成一个一个的小模块,最后组装需要的模块组成一个app 模块化架构 创建一个 Proj ...

  4. Android 组件化架构概要,ffmpeg音视频开发实战陈超

    ChatModule ContactModule FindModule MeModule BaseModule 分别对应的是微信,联系人,发现,我和基类. 3.自定义Gradle 我们在Project ...

  5. 单文件组件的组件传值_移动端组件化架构(下)

    我的组件化方案 对于项目架构来说,一定要建立于业务之上来设计架构.不同的项目业务不同,组件化方案的设计也会不同,应该设计最适合公司业务的架构. 架构设计 以我之前公司项目为例,项目是一个地图导航应用, ...

  6. 案例精选 | 蘑菇街、滴滴、淘宝、微信的组件化架构解析

    导读:前段时间公司项目打算重构,准确来说应该是按之前的产品逻辑重写一个项目.在重构项目之前涉及到架构选型的问题,我和组里小伙伴一起研究了一下组件化架构,打算将项目重构为组件化架构.当然不是直接拿来照搬 ...

  7. vue2.0 class声明组件_案例精选 | 蘑菇街、滴滴、淘宝、微信的组件化架构解析

    导读:前段时间公司项目打算重构,准确来说应该是按之前的产品逻辑重写一个项目.在重构项目之前涉及到架构选型的问题,我和组里小伙伴一起研究了一下组件化架构,打算将项目重构为组件化架构.当然不是直接拿来照搬 ...

  8. 蘑菇街、滴滴、淘宝、微信的组件化架构解析,附Demo和PDF

    前段时间公司项目打算重构,准确来说应该是按之前的产品逻辑重写一个项目?.在重构项目之前涉及到架构选型的问题,我和组里小伙伴一起研究了一下组件化架构,打算将项目重构为组件化架构.当然不是直接拿来照搬,还 ...

  9. iOS开发之组件化架构漫谈

    前段时间公司项目打算重构,准确来说应该是按之前的产品逻辑重写一个项目.在重构项目之前涉及到架构选型的问题,我和组里小伙伴一起研究了一下组件化架构,打算将项目重构为组件化架构.当然不是直接拿来照搬,还是 ...

  10. 使用ARouter实现组件化

    使用ARouter实现组件化 ARouter是阿里在github上面的一个开源项目,地址是:ARouter 本文不是重点分享ARouter的使用,而是分享使用ARouter如何去组件化.关于它的详细使 ...

最新文章

  1. Kali Linux 安全渗透教程第一更
  2. 分享一个OTA测试服务器,可以用来测试esp8266的http update功能
  3. Kafka 配置说明
  4. php 连接 mysql主从_php 连接主从数据库
  5. 小米岭南通服务器维护,小米岭南通交通联合卡内测开启
  6. vue一步一步带你封装一个按钮组件
  7. 开发springboot项目,遇到的一些问题总结
  8. 如何将本地MySQL提交到网络_如何把本地MySql数据库移植到远程服务器上
  9. python 运算符与流程控制
  10. 计算机字处理软件word文档,2012计算机字处理软件 Word(answer)
  11. Python之路-(列表、元组、字典、集合、字符串)
  12. Android三种左右滑动效果 手势识别(转)
  13. 微信加人的108种方法
  14. 计算机二级知识普及挑战赛答案,全国计算机二级试题库
  15. 如何共享OneNote笔记本
  16. 找同学 字典 11.12
  17. 成为JAVA架构师必看书籍推荐
  18. MyBatis级联一对一与一对多
  19. 问题 B: 结构体---职工信息结构体
  20. java graphics2d 绘图_java GUI Graphics2D 绘图

热门文章

  1. PS使用:windows解决Adobe Photoshop 2020(PS2020)闪退
  2. WOW、ScrollReveal:WOW.js和ScrollReveal.js基础学习
  3. 论文笔记_S2D.69_用于 LiDAR 里程计和建图的泊松曲面重建
  4. 递归算法—输入字母逆序输出汉诺塔递归算法
  5. arbotix导入出错
  6. [置顶] 原创鼠标拖动实现DIV排序
  7. ServletContext和ServletConfig
  8. 将ant Design本地化,可通过link以及script直接引入html中使用
  9. 006 关于大数据的本地模式环境的搭建
  10. (2)[wp7数据存储] WP7 IsolatedStorage系列篇——获取存储的文件或文件夹 [复制链接]...