安卓一鍵分享代碼


package cn.sharesdk.onekeyshare;

import static cn.sharesdk.framework.utils.BitmapHelper.captureView;

import static cn.sharesdk.framework.utils.R.getStringRes;

import java.io.File;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Map.Entry;

import android.app.NotificationManager;

import android.content.Context;

import android.graphics.Bitmap;

import android.os.Handler.Callback;

import android.os.Message;

import android.text.TextUtils;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Toast;

import cn.sharesdk.framework.CustomPlatform;

import cn.sharesdk.framework.Platform;

import cn.sharesdk.framework.PlatformActionListener;

import cn.sharesdk.framework.ShareSDK;

import cn.sharesdk.framework.utils.UIHandler;

/**

* 快捷分享的入口

*

* 通過不同的setter設置參數,然後調用{@link #show(Context)}方法啟動快捷分享

*/

public class OnekeyShare implements PlatformActionListener, Callback {

private static final int MSG_TOAST = 1;

private static final int MSG_ACTION_CCALLBACK = 2;

private static final int MSG_CANCEL_NOTIFY = 3;

private HashMap<string> shareParamsMap;/<string>

private ArrayList<customerlogo> customers;/<customerlogo>

private boolean silent;

private PlatformActionListener callback;

private ShareContentCustomizeCallback customizeCallback;

private boolean dialogMode = false;

private boolean disableSSO;

private HashMap<string> hiddenPlatforms;/<string>

private View bgView;

private OnekeyShareTheme theme;

private Context context;

private PlatformListFakeActivity.OnShareButtonClickListener onShareButtonClickListener;

public OnekeyShare() {

shareParamsMap = new HashMap<string>();/<string>

customers = new ArrayList<customerlogo>();/<customerlogo>

callback = this;

hiddenPlatforms = new HashMap<string>();/<string>

}

public void show(Context context) {

ShareSDK.initSDK(context);

this.context = context;

// 打開分享菜單的統計

ShareSDK.logDemoEvent(1, null);

// 顯示方式是由platform和silent兩個字段控制的

// 如果platform設置了,則無須顯示九宮格,否則都會顯示;

// 如果silent為true,表示不進入編輯頁面,否則會進入。

// 本類只判斷platform,因為九宮格顯示以後,事件交給PlatformGridView控制

// 當platform和silent都為true,則直接進入分享;

// 當platform設置了,但是silent為false,則判斷是否是“使用客戶端分享”的平臺,

// 若為“使用客戶端分享”的平臺,則直接分享,否則進入編輯頁面

if (shareParamsMap.containsKey("platform")) {

String name = String.valueOf(shareParamsMap.get("platform"));

Platform platform = ShareSDK.getPlatform(name);

if (silent

|| ShareCore.isUseClientToShare(name)

|| platform instanceof CustomPlatform

) {

HashMap<platform>> shareData/<platform>

= new HashMap<platform>>();/<platform>

shareData.put(ShareSDK.getPlatform(name), shareParamsMap);

share(shareData);

return;

}

}

PlatformListFakeActivity platformListFakeActivity;

try {

if(OnekeyShareTheme.SKYBLUE == theme){

platformListFakeActivity = (PlatformListFakeActivity) Class.forName("cn.sharesdk.onekeyshare.theme.skyblue.PlatformListPage").newInstance();

}else{

platformListFakeActivity = (PlatformListFakeActivity) Class.forName("cn.sharesdk.onekeyshare.theme.classic.PlatformListPage").newInstance();

}

} catch (Exception e) {

e.printStackTrace();

return;

}

platformListFakeActivity.setDialogMode(dialogMode);

platformListFakeActivity.setShareParamsMap(shareParamsMap);

platformListFakeActivity.setSilent(silent);

platformListFakeActivity.setCustomerLogos(customers);

platformListFakeActivity.setBackgroundView(bgView);

platformListFakeActivity.setHiddenPlatforms(hiddenPlatforms);

platformListFakeActivity.setOnShareButtonClickListener(onShareButtonClickListener);

platformListFakeActivity.setThemeShareCallback(new ThemeShareCallback() {

@Override

public void doShare(HashMap<platform>> shareData) {/<platform>

share(shareData);

}

});

if (shareParamsMap.containsKey("platform")) {

String name = String.valueOf(shareParamsMap.get("platform"));

Platform platform = ShareSDK.getPlatform(name);

platformListFakeActivity.showEditPage(context, platform);

return;

}

platformListFakeActivity.show(context, null);

}

public void setTheme(OnekeyShareTheme theme) {

this.theme = theme;

}

/** address是接收人地址,僅在信息和郵件使用,否則可以不提供 */

public void setAddress(String address) {

shareParamsMap.put("address", address);

}

/**

* title標題,在印象筆記、郵箱、信息、微信(包括好友、朋友圈和收藏)、

* 易信(包括好友、朋友圈)、人人網和QQ空間使用,否則可以不提供

*/

public void setTitle(String title) {

shareParamsMap.put("title", title);

}

/** titleUrl是標題的網絡鏈接,僅在人人網和QQ空間使用,否則可以不提供 */

public void setTitleUrl(String titleUrl) {

shareParamsMap.put("titleUrl", titleUrl);

}

/** text是分享文本,所有平臺都需要這個字段 */

public void setText(String text) {

shareParamsMap.put("text", text);

}

/** 獲取text字段的值 */

public String getText() {

return shareParamsMap.containsKey("text") ? String.valueOf(shareParamsMap.get("text")) : null;

}

/** imagePath是本地的圖片路徑,除Linked-In外的所有平臺都支持這個字段 */

public void setImagePath(String imagePath) {

if(!TextUtils.isEmpty(imagePath))

shareParamsMap.put("imagePath", imagePath);

}

/** imageUrl是圖片的網絡路徑,新浪微博、人人網、QQ空間和Linked-In支持此字段 */

public void setImageUrl(String imageUrl) {

if (!TextUtils.isEmpty(imageUrl))

shareParamsMap.put("imageUrl", imageUrl);

}

/** url在微信(包括好友、朋友圈收藏)和易信(包括好友和朋友圈)中使用,否則可以不提供 */

public void setUrl(String url) {

shareParamsMap.put("url", url);

}

/** filePath是待分享應用程序的本地路勁,僅在微信(易信)好友和Dropbox中使用,否則可以不提供 */

public void setFilePath(String filePath) {

shareParamsMap.put("filePath", filePath);

}

/** comment是我對這條分享的評論,僅在人人網和QQ空間使用,否則可以不提供 */

public void setComment(String comment) {

shareParamsMap.put("comment", comment);

}

/** site是分享此內容的網站名稱,僅在QQ空間使用,否則可以不提供 */

public void setSite(String site) {

shareParamsMap.put("site", site);

}

/** siteUrl是分享此內容的網站地址,僅在QQ空間使用,否則可以不提供 */

public void setSiteUrl(String siteUrl) {

shareParamsMap.put("siteUrl", siteUrl);

}

/** foursquare分享時的地方名 */

public void setVenueName(String venueName) {

shareParamsMap.put("venueName", venueName);

}

/** foursquare分享時的地方描述 */

public void setVenueDescription(String venueDescription) {

shareParamsMap.put("venueDescription", venueDescription);

}

/** 分享地緯度,新浪微博、騰訊微博和foursquare支持此字段 */

public void setLatitude(float latitude) {

shareParamsMap.put("latitude", latitude);

}

/** 分享地經度,新浪微博、騰訊微博和foursquare支持此字段 */

public void setLongitude(float longitude) {

shareParamsMap.put("longitude", longitude);

}

/** 是否直接分享 */

public void setSilent(boolean silent) {

this.silent = silent;

}

/** 設置編輯頁的初始化選中平臺 */

public void setPlatform(String platform) {

shareParamsMap.put("platform", platform);

}

/** 設置KakaoTalk的應用下載地址 */

public void setInstallUrl(String installurl) {

shareParamsMap.put("installurl", installurl);

}

/** 設置KakaoTalk的應用打開地址 */

public void setExecuteUrl(String executeurl) {

shareParamsMap.put("executeurl", executeurl);

}

/** 設置微信分享的音樂的地址 */

public void setMusicUrl(String musicUrl) {

shareParamsMap.put("musicUrl", musicUrl);

}

/** 設置自定義的外部回調 */

public void setCallback(PlatformActionListener callback) {

this.callback = callback;

}

/** 返回操作回調 */

public PlatformActionListener getCallback() {

return callback;

}

/** 設置用於分享過程中,根據不同平臺自定義分享內容的回調 */

public void setShareContentCustomizeCallback(ShareContentCustomizeCallback callback) {

customizeCallback = callback;

}

/** 返回自定義分享內容的回調 */

public ShareContentCustomizeCallback getShareContentCustomizeCallback() {

return customizeCallback;

}

/** 設置自己圖標和點擊事件,可以重複調用添加多次 */

public void setCustomerLogo(Bitmap enableLogo,Bitmap disableLogo, String label, OnClickListener ocListener) {

CustomerLogo cl = new CustomerLogo();

cl.label = label;

cl.enableLogo = enableLogo;

cl.disableLogo = disableLogo;

cl.listener = ocListener;

customers.add(cl);

}

/** 設置一個總開關,用於在分享前若需要授權,則禁用sso功能 */

public void disableSSOWhenAuthorize() {

disableSSO = true;

}

/** 設置編輯頁面的顯示模式為Dialog模式 */

public void setDialogMode() {

dialogMode = true;

shareParamsMap.put("dialogMode", dialogMode);

}

/** 添加一個隱藏的platform */

public void addHiddenPlatform(String platform) {

hiddenPlatforms.put(platform, platform);

}

/** 設置一個將被截圖分享的View , surfaceView是截不了圖片的*/

public void setViewToShare(View viewToShare) {

try {

Bitmap bm = captureView(viewToShare, viewToShare.getWidth(), viewToShare.getHeight());

shareParamsMap.put("viewToShare", bm);

} catch (Throwable e) {

e.printStackTrace();

}

}

/** 騰訊微博分享多張圖片 */

public void setImageArray(String[] imageArray) {

shareParamsMap.put("imageArray", imageArray);

}

public void setEditPageBackground(View bgView) {

this.bgView = bgView;

}

public void setOnShareButtonClickListener(PlatformListFakeActivity.OnShareButtonClickListener onShareButtonClickListener) {

this.onShareButtonClickListener = onShareButtonClickListener;

}

/** 循環執行分享 */

public void share(HashMap<platform>> shareData) {/<platform>

boolean started = false;

for (Entry<platform>> ent : shareData.entrySet()) {/<platform>

Platform plat = ent.getKey();

plat.SSOSetting(disableSSO);

String name = plat.getName();

//boolean isGooglePlus = "GooglePlus".equals(name);

//if (isGooglePlus && !plat.isValid()) {

//Message msg = new Message();

//msg.what = MSG_TOAST;

//int resId = getStringRes(context, "google_plus_client_inavailable");

//msg.obj = context.getString(resId);

//UIHandler.sendMessage(msg, this);

//continue;

//}

boolean isKakaoTalk = "KakaoTalk".equals(name);

if (isKakaoTalk && !plat.isClientValid()) {

Message msg = new Message();

msg.what = MSG_TOAST;

int resId = getStringRes(context, "kakaotalk_client_inavailable");

msg.obj = context.getString(resId);

UIHandler.sendMessage(msg, this);

continue;

}

boolean isKakaoStory = "KakaoStory".equals(name);

if (isKakaoStory && !plat.isClientValid()) {

Message msg = new Message();

msg.what = MSG_TOAST;

int resId = getStringRes(context, "kakaostory_client_inavailable");

msg.obj = context.getString(resId);

UIHandler.sendMessage(msg, this);

continue;

}

boolean isLine = "Line".equals(name);

if (isLine && !plat.isClientValid()) {

Message msg = new Message();

msg.what = MSG_TOAST;

int resId = getStringRes(context, "line_client_inavailable");

msg.obj = context.getString(resId);

UIHandler.sendMessage(msg, this);

continue;

}

boolean isWhatsApp = "WhatsApp".equals(name);

if (isWhatsApp && !plat.isClientValid()) {

Message msg = new Message();

msg.what = MSG_TOAST;

int resId = getStringRes(context, "whatsapp_client_inavailable");

msg.obj = context.getString(resId);

UIHandler.sendMessage(msg, this);

continue;

}

boolean isPinterest = "Pinterest".equals(name);

if (isPinterest && !plat.isClientValid()) {

Message msg = new Message();

msg.what = MSG_TOAST;

int resId = getStringRes(context, "pinterest_client_inavailable");

msg.obj = context.getString(resId);

UIHandler.sendMessage(msg, this);

continue;

}

if ("Instagram".equals(name) && !plat.isClientValid()) {

Message msg = new Message();

msg.what = MSG_TOAST;

int resId = getStringRes(context, "instagram_client_inavailable");

msg.obj = context.getString(resId);

UIHandler.sendMessage(msg, this);

continue;

}

boolean isLaiwang = "Laiwang".equals(name);

boolean isLaiwangMoments = "LaiwangMoments".equals(name);

if(isLaiwang || isLaiwangMoments){

if (!plat.isClientValid()) {

Message msg = new Message();

msg.what = MSG_TOAST;

int resId = getStringRes(context, "laiwang_client_inavailable");

msg.obj = context.getString(resId);

UIHandler.sendMessage(msg, this);

continue;

}

}

boolean isYixin = "YixinMoments".equals(name) || "Yixin".equals(name);

if (isYixin && !plat.isClientValid()) {

Message msg = new Message();

msg.what = MSG_TOAST;

int resId = getStringRes(context, "yixin_client_inavailable");

msg.obj = context.getString(resId);

UIHandler.sendMessage(msg, this);

continue;

}

HashMap<string> data = ent.getValue();/<string>

int shareType = Platform.SHARE_TEXT;

String imagePath = String.valueOf(data.get("imagePath"));

if (imagePath != null && (new File(imagePath)).exists()) {

shareType = Platform.SHARE_IMAGE;

if (imagePath.endsWith(".gif")) {

shareType = Platform.SHARE_EMOJI;

} else if (data.containsKey("url") && !TextUtils.isEmpty(data.get("url").toString())) {

shareType = Platform.SHARE_WEBPAGE;

if (data.containsKey("musicUrl") && !TextUtils.isEmpty(data.get("musicUrl").toString())) {

shareType = Platform.SHARE_MUSIC;

}

}

} else {

Bitmap viewToShare = (Bitmap) data.get("viewToShare");

if (viewToShare != null && !viewToShare.isRecycled()) {

shareType = Platform.SHARE_IMAGE;

if (data.containsKey("url") && !TextUtils.isEmpty(data.get("url").toString())) {

shareType = Platform.SHARE_WEBPAGE;

if (data.containsKey("musicUrl") && !TextUtils.isEmpty(data.get("musicUrl").toString())) {

shareType = Platform.SHARE_MUSIC;

}

}

} else {

Object imageUrl = data.get("imageUrl");

if (imageUrl != null && !TextUtils.isEmpty(String.valueOf(imageUrl))) {

shareType = Platform.SHARE_IMAGE;

if (String.valueOf(imageUrl).endsWith(".gif")) {

shareType = Platform.SHARE_EMOJI;

} else if (data.containsKey("url") && !TextUtils.isEmpty(data.get("url").toString())) {

shareType = Platform.SHARE_WEBPAGE;

if (data.containsKey("musicUrl") && !TextUtils.isEmpty(data.get("musicUrl").toString())) {

shareType = Platform.SHARE_MUSIC;

}

}

}

}

}

data.put("shareType", shareType);

if (!started) {

started = true;

if (this == callback) {

int resId = getStringRes(context, "sharing");

if (resId > 0) {

showNotification(context.getString(resId));

}

}

}

plat.setPlatformActionListener(callback);

ShareCore shareCore = new ShareCore();

shareCore.setShareContentCustomizeCallback(customizeCallback);

shareCore.share(plat, data);

}

}

public void onComplete(Platform platform, int action,

HashMap<string> res) {/<string>

Message msg = new Message();

msg.what = MSG_ACTION_CCALLBACK;

msg.arg1 = 1;

msg.arg2 = action;

msg.obj = platform;

UIHandler.sendMessage(msg, this);

}

public void onError(Platform platform, int action, Throwable t) {

t.printStackTrace();

Message msg = new Message();

msg.what = MSG_ACTION_CCALLBACK;

msg.arg1 = 2;

msg.arg2 = action;

msg.obj = t;

UIHandler.sendMessage(msg, this);

// 分享失敗的統計

ShareSDK.logDemoEvent(4, platform);

}

public void onCancel(Platform platform, int action) {

Message msg = new Message();

msg.what = MSG_ACTION_CCALLBACK;

msg.arg1 = 3;

msg.arg2 = action;

msg.obj = platform;

UIHandler.sendMessage(msg, this);

}

public boolean handleMessage(Message msg) {

switch(msg.what) {

case MSG_TOAST: {

String text = String.valueOf(msg.obj);

Toast.makeText(context, text, Toast.LENGTH_SHORT).show();

}

break;

case MSG_ACTION_CCALLBACK: {

switch (msg.arg1) {

case 1: {

// 成功

int resId = getStringRes(context, "share_completed");

if (resId > 0) {

showNotification(context.getString(resId));

}

}

break;

case 2: {

// 失敗

String expName = msg.obj.getClass().getSimpleName();

if ("WechatClientNotExistException".equals(expName)

|| "WechatTimelineNotSupportedException".equals(expName)

|| "WechatFavoriteNotSupportedException".equals(expName)) {

int resId = getStringRes(context, "wechat_client_inavailable");

if (resId > 0) {

showNotification(context.getString(resId));

}

} else if ("GooglePlusClientNotExistException".equals(expName)) {

int resId = getStringRes(context, "google_plus_client_inavailable");

if (resId > 0) {

showNotification(context.getString(resId));

}

} else if ("QQClientNotExistException".equals(expName)) {

int resId = getStringRes(context, "qq_client_inavailable");

if (resId > 0) {

showNotification(context.getString(resId));

}

} else if ("YixinClientNotExistException".equals(expName)

|| "YixinTimelineNotSupportedException".equals(expName)) {

int resId = getStringRes(context, "yixin_client_inavailable");

if (resId > 0) {

showNotification(context.getString(resId));

}

} else if ("KakaoTalkClientNotExistException".equals(expName)) {

int resId = getStringRes(context, "kakaotalk_client_inavailable");

if (resId > 0) {

showNotification(context.getString(resId));

}

}else if ("KakaoStoryClientNotExistException".equals(expName)) {

int resId = getStringRes(context, "kakaostory_client_inavailable");

if (resId > 0) {

showNotification(context.getString(resId));

}

}else if("WhatsAppClientNotExistException".equals(expName)){

int resId = getStringRes(context, "whatsapp_client_inavailable");

if (resId > 0) {

showNotification(context.getString(resId));

}

}else {

int resId = getStringRes(context, "share_failed");

if (resId > 0) {

showNotification(context.getString(resId));

}

}

}

break;

case 3: {

// 取消

int resId = getStringRes(context, "share_canceled");

if (resId > 0) {

showNotification(context.getString(resId));

}

}

break;

}

}

break;

case MSG_CANCEL_NOTIFY: {

NotificationManager nm = (NotificationManager) msg.obj;

if (nm != null) {

nm.cancel(msg.arg1);

}

}

break;

}

return false;

}

// 在狀態欄提示分享操作

private void showNotification(String text) {

Toast.makeText(context, text, Toast.LENGTH_SHORT).show();

}

/** 是否支持QQ,QZone授權登錄後發微博 */

public void setShareFromQQAuthSupport(boolean shareFromQQLogin)

{

shareParamsMap.put("isShareTencentWeibo", shareFromQQLogin);

}

}


分享到:


相關文章: