仿Handler机制设计OneKeyShare(Builder+策略)

1 统一的分享

public class SharedContext {
    private String title;
    private String defTitle;
    private String content;
    private String defContent;
    private String imageUrl;
    private String defImageUrl;
    private String shareUrl;
    private String site;
    private boolean relace2WX;
    private ExtraSetting extraSetting;
    private ShareStrategy shareStrategy = new DefShareStrategy();

    public void share(@NonNull Context context){
        shareStrategy.share(context,this);
    }
    public void share(@NonNull Context context,@NonNull ShareStrategy strategy) {
        strategy.share(context,this);
    }
    public String getSite() {
        return site;
    }

    public ExtraSetting getExtraSetting() {
        return extraSetting;
    }

    public SharedContext setExtraSetting(ExtraSetting extraSetting) {
        this.extraSetting = extraSetting;
        return this;
    }

    public SharedContext setSite(String site) {
        this.site = site;
        return this;
    }
    public boolean isRelace2WX() {
        return relace2WX;
    }

    public SharedContext setRelace2WX(boolean relace2WX) {
        this.relace2WX = relace2WX;
        return this;
    }

    public String getTitle() {
        return title;
    }

    public String getDefTitle() {
        return defTitle;
    }

    public String getContent() {
        return content;
    }

    public String getDefContent() {
        return defContent;
    }

    public String getImageUrl() {
        return imageUrl;
    }

    public String getDefImageUrl() {
        return defImageUrl;
    }

    public String getShareUrl() {
        return shareUrl;
    }

    public SharedContext setShareStrategy(@Nullable ShareStrategy shareStrategy) {
        this.shareStrategy = shareStrategy;
        return this;
    }
    private ShareStrategy getShareStrategy(){
        return shareStrategy;
    }


    public SharedContext setTitle(String title) {
        this.title = title;
        return this;
    }

    public SharedContext setDefTitle(String defTitle) {
        this.defTitle = defTitle;
        return this;
    }

    public SharedContext setContent(String content) {
        this.content = content;
        return this;
    }

    public SharedContext setDefContent(String defContent) {
        this.defContent = defContent;
        return this;
    }

    public SharedContext setImageUrl(String imageUrl) {
        this.imageUrl = imageUrl;
        return this;
    }
    public SharedContext setDefImageUrl(String defImageUrl) {
        this.defImageUrl = defImageUrl;
        return this;
    }
    public SharedContext setShareUrl(String shareUrl) {
        this.shareUrl = shareUrl;
        return this;
    }
    public interface ExtraSetting{
        void doExtraSet(@NonNull OnekeyShare oks);
    }
}

2 分享策略(可以添加额外的扩展)

public abstract class ShareStrategy {
    abstract void share(Context context,SharedContext sharedContext);
    protected void commonShare(Context context, OnekeyShare oks, SharedContext sharedContext){
        //指定分享的平台,如果为空,还是会调用九宫格的平台列表界面
//        if (platform != null) {
//            oks.setPlatform(platform);
//        }
        //隐藏掉朋友圈分享
        //  oks.addHiddenPlatform(WechatMoments.NAME);
        //关闭sso授权
        oks.disableSSOWhenAuthorize();
        // title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间等使用
        oks.setTitle(TextUtils.isEmpty(sharedContext.getTitle()) ? sharedContext.getDefTitle() : sharedContext.getTitle());
        // titleUrl是标题的网络链接,QQ和QQ空间等使用// titleUrl是标题的网络链接,仅在人人网和QQ空间使用
        //oks.setTitleUrl(URL);
        oks.setText(TextUtils.isEmpty(sharedContext.getContent()) ? sharedContext.getDefContent() : sharedContext.getContent());
        //分享网络图片,新浪微博分享网络图片需要通过审核后申请高级写入接口,否则请注释掉测试新浪微博
        if (!TextUtils.isEmpty(sharedContext.getImageUrl())) {
            oks.setImageUrl(sharedContext.getImageUrl());
        } else if (!TextUtils.isEmpty(sharedContext.getDefImageUrl())) {
            oks.setImageUrl(sharedContext.getDefImageUrl());
        } else {
            //无图片分享一张默认图片
            Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher);
            oks.setImageData(bmp);
        }
        // url仅在微信(包括好友和朋友圈)中使用
        if (sharedContext.isRelace2WX()) {
            oks.setUrl(sharedContext.getShareUrl().replace("selectNewsInfo", "selectWXNewsInfo"));
        } else {
            oks.setUrl(sharedContext.getShareUrl());
        }
        // comment是我对这条分享的评论,仅在人人网和QQ空间使用
//        oks.setComment("邀请好友得奖励可提现");
        // site是分享此内容的网站名称,仅在QQ空间使用
        oks.setSite(TextUtils.isEmpty(sharedContext.getSite()) ? "新闻" : sharedContext.getSite());
        //siteUrl是分享此内容的网站地址,仅在QQ空间使用
        oks.setSiteUrl(sharedContext.getShareUrl());
        if (sharedContext.getExtraSetting() != null){
            sharedContext.getExtraSetting().doExtraSet(oks);
        }
    }
}

3 默认策略

public class DefShareStrategy extends ShareStrategy {
    @Override
    public void share(Context context, SharedContext sharedContext) {
        if (TextUtils.isEmpty(sharedContext.getTitle())) {
            Toast.makeText(context, "分享链接为空", Toast.LENGTH_SHORT).show();
            return;
        }
        OnekeyShare oks = new OnekeyShare();
        commonShare(context,oks,sharedContext);
        oks.show(context);
    }
}

4 使用

    private void Shared() {
        new SharedContext()
                .setTitle("title")
                .setContent("content")
                .setImageUrl("http://...")
                .setShareUrl(shareUrl)
                .setSite("新闻")
                .share(context);
    }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值