/* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare; import static com.mob.tools.utils.BitmapHelper.captureView; import java.util.ArrayList; import java.util.HashMap; import android.content.Context; import android.graphics.Bitmap; import android.text.TextUtils; import android.view.View; import android.view.View.OnClickListener; import cn.sharesdk.framework.Platform; import cn.sharesdk.framework.PlatformActionListener; import cn.sharesdk.framework.ShareSDK; import com.mob.tools.utils.R; /** * 快捷分享的入口 * <p> * 通过不同的setter设置参数,然后调用{@link #show(Context)}方法启动快捷分享 */ public class OnekeyShare { private HashMap<String, Object> params; public OnekeyShare() { params = new HashMap<String, Object>(); params.put("customers", new ArrayList<CustomerLogo>()); params.put("hiddenPlatforms", new HashMap<String, String>()); } /** address是接收人地址,仅在信息和邮件使用,否则可以不提供 */ public void setAddress(String address) { params.put("address", address); } /** * title标题,在印象笔记、邮箱、信息、微信(包括好友、朋友圈和收藏)、 * 易信(包括好友、朋友圈)、人人网和QQ空间使用,否则可以不提供 */ public void setTitle(String title) { params.put("title", title); } /** titleUrl是标题的网络链接,仅在人人网和QQ空间使用,否则可以不提供 */ public void setTitleUrl(String titleUrl) { params.put("titleUrl", titleUrl); } /** text是分享文本,所有平台都需要这个字段 */ public void setText(String text) { params.put("text", text); } /** 获取text字段的值 */ public String getText() { return params.containsKey("text") ? String.valueOf(params.get("text")) : null; } /** imagePath是本地的图片路径,除Linked-In外的所有平台都支持这个字段 */ public void setImagePath(String imagePath) { if(!TextUtils.isEmpty(imagePath)) params.put("imagePath", imagePath); } /** imageUrl是图片的网络路径,新浪微博、人人网、QQ空间和Linked-In支持此字段 */ public void setImageUrl(String imageUrl) { if (!TextUtils.isEmpty(imageUrl)) params.put("imageUrl", imageUrl); } /** url在微信(包括好友、朋友圈收藏)和易信(包括好友和朋友圈)中使用,否则可以不提供 */ public void setUrl(String url) { params.put("url", url); } /** filePath是待分享应用程序的本地路劲,仅在微信(易信)好友和Dropbox中使用,否则可以不提供 */ public void setFilePath(String filePath) { params.put("filePath", filePath); } /** comment是我对这条分享的评论,仅在人人网和QQ空间使用,否则可以不提供 */ public void setComment(String comment) { params.put("comment", comment); } /** site是分享此内容的网站名称,仅在QQ空间使用,否则可以不提供 */ public void setSite(String site) { params.put("site", site); } /** siteUrl是分享此内容的网站地址,仅在QQ空间使用,否则可以不提供 */ public void setSiteUrl(String siteUrl) { params.put("siteUrl", siteUrl); } /** foursquare分享时的地方名 */ public void setVenueName(String venueName) { params.put("venueName", venueName); } /** foursquare分享时的地方描述 */ public void setVenueDescription(String venueDescription) { params.put("venueDescription", venueDescription); } /** 分享地纬度,新浪微博、腾讯微博和foursquare支持此字段 */ public void setLatitude(float latitude) { params.put("latitude", latitude); } /** 分享地经度,新浪微博、腾讯微博和foursquare支持此字段 */ public void setLongitude(float longitude) { params.put("longitude", longitude); } /** 是否直接分享 */ public void setSilent(boolean silent) { params.put("silent", silent); } /** 设置编辑页的初始化选中平台 */ public void setPlatform(String platform) { params.put("platform", platform); } /** 设置KakaoTalk的应用下载地址 */ public void setInstallUrl(String installurl) { params.put("installurl", installurl); } /** 设置KakaoTalk的应用打开地址 */ public void setExecuteUrl(String executeurl) { params.put("executeurl", executeurl); } /** 设置微信分享的音乐的地址 */ public void setMusicUrl(String musicUrl) { params.put("musicUrl", musicUrl); } /** 设置自定义的外部回调 */ public void setCallback(PlatformActionListener callback) { params.put("callback", callback); } /** 返回操作回调 */ public PlatformActionListener getCallback() { return R.forceCast(params.get("callback")); } /** 设置用于分享过程中,根据不同平台自定义分享内容的回调 */ public void setShareContentCustomizeCallback(ShareContentCustomizeCallback callback) { params.put("customizeCallback", callback); } /** 自定义不同平台分享不同内容的回调 */ public ShareContentCustomizeCallback getShareContentCustomizeCallback() { return R.forceCast(params.get("customizeCallback")); } /** 设置自己图标和点击事件,可以重复调用添加多次 */ public void setCustomerLogo(Bitmap logo, String label, OnClickListener ocl) { CustomerLogo cl = new CustomerLogo(); cl.logo = logo; cl.label = label; cl.listener = ocl; ArrayList<CustomerLogo> customers = R.forceCast(params.get("customers")); customers.add(cl); } /** 设置一个总开关,用于在分享前若需要授权,则禁用sso功能 */ public void disableSSOWhenAuthorize() { params.put("disableSSO", true); } /** 设置视频网络地址 */ public void setVideoUrl(String url) { params.put("url", url); params.put("shareType", Platform.SHARE_VIDEO); } /** 设置编辑页面的显示模式为Dialog模式 */ @Deprecated public void setDialogMode() { params.put("dialogMode", true); } /** 添加一个隐藏的platform */ public void addHiddenPlatform(String platform) { HashMap<String, String> hiddenPlatforms = R.forceCast(params.get("hiddenPlatforms")); hiddenPlatforms.put(platform, platform); } /** 设置一个将被截图分享的View , surfaceView是截不了图片的*/ public void setViewToShare(View viewToShare) { try { Bitmap bm = captureView(viewToShare, viewToShare.getWidth(), viewToShare.getHeight()); params.put("viewToShare", bm); } catch (Throwable e) { e.printStackTrace(); } } /** 腾讯微博分享多张图片 */ public void setImageArray(String[] imageArray) { params.put("imageArray", imageArray); } /** 设置在执行分享到QQ或QZone的同时,分享相同的内容腾讯微博 */ public void setShareToTencentWeiboWhenPerformingQQOrQZoneSharing() { params.put("isShareTencentWeibo", true); } /** 设置分享界面的样式,目前只有一种,不需要设置 */ public void setTheme(OnekeyShareTheme theme) { params.put("theme", theme.getValue()); } @SuppressWarnings("unchecked") public void show(Context context) { HashMap<String, Object> shareParamsMap = new HashMap<String, Object>(); shareParamsMap.putAll(params); ShareSDK.initSDK(context); // 打开分享菜单的统计 ShareSDK.logDemoEvent(1, null); int iTheme = 0; try { iTheme = R.parseInt(String.valueOf(shareParamsMap.remove("theme"))); } catch (Throwable t) {} OnekeyShareTheme theme = OnekeyShareTheme.fromValue(iTheme); OnekeyShareThemeImpl themeImpl = theme.getImpl(); themeImpl.setShareParamsMap(shareParamsMap); themeImpl.setDialogMode(shareParamsMap.containsKey("dialogMode") ? ((Boolean) shareParamsMap.remove("dialogMode")) : false); themeImpl.setSilent(shareParamsMap.containsKey("silent") ? ((Boolean) shareParamsMap.remove("silent")) : false); themeImpl.setCustomerLogos((ArrayList<CustomerLogo>) shareParamsMap.remove("customers")); themeImpl.setHiddenPlatforms((HashMap<String, String>) shareParamsMap.remove("hiddenPlatforms")); themeImpl.setPlatformActionListener((PlatformActionListener) shareParamsMap.remove("callback")); themeImpl.setShareContentCustomizeCallback((ShareContentCustomizeCallback) shareParamsMap.remove("customizeCallback")); if (shareParamsMap.containsKey("disableSSO") ? ((Boolean) shareParamsMap.remove("disableSSO")) : false) { themeImpl.disableSSO(); } themeImpl.show(context); } }