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);
}