Android开发脚手架:扩展定制EasyShare进行社会化分享

EasyShare

一个Android社会化分享脚手架,集成微信,qq,微博分享。
项目地址:https://github.com/xiong-it/EasyShare/

作用

利用抽象工厂,工厂方法,桥接模式搭配Java泛型封装的一个简单易扩展的分享组件,无法代替ShareSDK等商业化SDK使用,仅供开发交流探讨,不建议线上项目直接使用,可供开发者参考扩展。

架构

[外链图片转存中…(img-ueYCL15M-1641521524200)]

  • IShareContent:分享的内容接口定义,具有share行为,通过桥接模式将share行为交给ISharePlatform执行
  • ISharePlatform:承接分享内容的目标平台,实际分享行为的对象接口
  • IShareModel:分享内容的属性封装,比如标题,图片地址,链接等
  • IShareDataFactory:根据IShareModel生产分享ISharePlatform平台所需的数据,其实现类抽象工厂AbsShareDataFactory定义了生产微信,朋友圈,QQ,微博4个产品族所需的数据函数

结构

  • callback-回调接口定义
  • factory-工厂类,顶级抽象工厂定义生产的所有平台的分享数据函数,拆分维度:以分享分平台为产品族,以分享内容类型为产品线。
  • model-模型类,顶级接口为IShareModel,分享数据所需要的数据模型,在此处新增需要分享的数据模型。
  • platform-分享目标平台,ISharePlatform是目标平台接口,所有衍生平台需实现该接口, 当接入新的分享平台时,需要在此处进行扩展。
  • type-分享数据类型的封装,分享的入口,顶级接口IShareContent,持有Share行为。
  • ui-界面相关类,比如IShareDialog.java,分享选择弹窗的接口类,需在项目中使用的弹窗中实现该接口。
  • wxapi-包名必须是项目包名,此处只做演示参考用。

集成步骤

  1. clone该仓库
  2. 参考DemoActivity

分享代码举例

以位图分享举例(场景:二维码图片分享)

// 1. 分享数据Model组装
IShareModel model = new BitmapShareModel() {
    @Override
    public Bitmap shareBitmap() {
            return getShareBitmap();
    }
};

// 2. 实例化分享数据类型
IShareContent bitmapShare = ShareContentFactory.newShareContent(platform, model);

// 3. 将对应数据分享出去
bitmapShare.share(this.activity, new OnShareResultCallback() {
    @Override
    public void onShareCancel(ISharePlatform platform, IShareContent type) {
        // 分享取消
    }

    @Override
    public void onShareFailed(ISharePlatform platform, IShareContent type, int errCode, String errMsg) {
        // 分享失败
    }

    @Override
    public void onShareSuccess(ISharePlatform platform, IShareContent type) {
        // 分享成功
     }
});

当你需要新增分享类型

  1. 扩展IShareModel接口,新增实现类
  2. 扩展IShareContent接口,新增实现类
  3. 扩展AbsShareDataFactory抽象工厂产品线,新增子类生产对应数据进行分享

当你需要新增分享平台

  1. 引入对应平台依赖libs
  2. 扩展ISharePlatform接口,新增一个实现类
  3. 扩展AbsShareDataFactory抽象类产品族(新增抽象函数)及其子类实现
  4. 修改IShareDialog子类实现,新增点击事件
Android分享文件有多种方式,以下是其中几种常见的方法: 1. 通过 Intent 进行分享 ```java // 定义分享文件的 Uri Uri fileUri = Uri.parse("file:///sdcard/xxx.txt"); // 创建分享 Intent Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.setType("*/*"); shareIntent.putExtra(Intent.EXTRA_STREAM, fileUri); // 启动分享 Intent startActivity(Intent.createChooser(shareIntent, "分享文件")); ``` 2. 使用 FileProvider 进行分享 ```java // 定义分享文件的 File 对象 File file = new File("/sdcard/xxx.txt"); // 获取 FileProvider 的 Uri Uri fileUri = FileProvider.getUriForFile(this, "com.example.fileprovider", file); // 创建分享 Intent Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.setType("*/*"); shareIntent.putExtra(Intent.EXTRA_STREAM, fileUri); // 授予 URI 临时权限 shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 启动分享 Intent startActivity(Intent.createChooser(shareIntent, "分享文件")); ``` 以上代码中,`com.example.fileprovider` 是 FileProvider 的 authorities,需要在 AndroidManifest.xml 中进行配置。 3. 使用第三方库进行分享 有一些第三方库可以简化分享文件的操作,如 ShareCompat、EasyShare 等。这里以 ShareCompat 为例: ```java // 定义分享文件的 Uri Uri fileUri = Uri.parse("file:///sdcard/xxx.txt"); // 使用 ShareCompat 进行分享 ShareCompat.IntentBuilder.from(this) .setType("*/*") .setStream(fileUri) .setChooserTitle("分享文件") .startChooser(); ``` 通过以上几种方式,你可以在 Android 上方便地分享文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值