之前做的分享都是先定义分享的内容之后再定义分享的平台,这次的需求是同一个东西分享在各个平台显示内容不同~

关于正常的分享配置的过程就不赘述了,用的是友盟的分享,官方文档很详细。

原来的分享方式

原本的分享方式是定义一个ShareAction,直接定义分享的内容及平台:

1
2
3
4
5
6
7
8
public void share(Activity context, String comment, String title, String image, String url) {
new ShareAction(context).withText(comment)
.withTargetUrl(url) // 分享的链接
.withTitle(title) // 分享的标题
.withMedia(new UMImage(context, image)) // 分享的图片
.setDisplayList(SHARE_MEDIA.WEIXIN_CIRCLE,SHARE_MEDIA.WEIXIN, SHARE_MEDIA.QQ, SHARE_MEDIA.SINA) // 分享的平台
.open();
}

这样的方式各个平台分享的内容都是相同的。

使用shareBoardlistener拦截修改分享内容

ShareAction中提供了一个setShareboardclickCallback方法,从字面意思是在点击分享的平台之后的回响,拦截点击后的响应,所以就在此做文章,由于各个平台对内容的处理方式不同,所以就传来了各项都需要的基本数据,再单独处理,所以定义了一个单独的bean类,存储基本信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
private class ShareModel{
private boolean isShareCD;
private String title;
private String performer; // 演奏家
private String composer; // 作曲家
private String CDName; // 专辑名
private String album; // 唱片名
private Activity context;
private String image;
private String url;
}
ShareModel mShareModel = new ShareModel();

private ShareBoardlistener shareBoardlistener = new ShareBoardlistener() {
@Override
public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA share_media) {
if (share_media != null) {
if (share_media == SHARE_MEDIA.WEIXIN || share_media == SHARE_MEDIA.QQ) {
new ShareAction(mShareModel.context)
.setPlatform(share_media)
// 微信与QQ基本配置,如withTitle等
.setCallback(umShareListener)
.share();
}else if(share_media == SHARE_MEDIA.WEIXIN_CIRCLE){
new ShareAction(mShareModel.context)
.setPlatform(share_media)
// 微信朋友圈的基本配置
.setCallback(umShareListener)
.share();
}else if(share_media == SHARE_MEDIA.SINA){
new ShareAction(mShareModel.context)
.setPlatform(share_media)
// 微博的基本配置
.setCallback(umShareListener)
.share();
}
}
}
};

由于各个share_media对应的量是枚举量,不能使用switch语句进行case。所以还是用if。
定义了这点击监听之后,在原本的ShareAction中进行设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void share(Activity context, boolean isShareCD, String album, String CDName, String composer, String
performer, String image, String url) {
mShareModel.context = context;
mShareModel.isShareCD = isShareCD;
mShareModel.album = album;
mShareModel.CDName = CDName;
mShareModel.composer = composer;
mShareModel.performer = performer;
mShareModel.image = image;
mShareModel.url = url;
new ShareAction(context)
.setDisplayList(SHARE_MEDIA.WEIXIN_CIRCLE, SHARE_MEDIA.WEIXIN, SHARE_MEDIA.QQ, SHARE_MEDIA.SINA)
.setShareboardclickCallback(shareBoardlistener)
.open();
}

有外部传进来那个bean类的各项基本数据,然后再用于shareBoardlistener进行数据配置。

Tip:如果有一个共同的配置也需要在shareBoardlistener里进行配置,外部无效。

效果

微博:微博
微信:微信
朋友圈:朋友圈