package com.wise.sharesdk; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map.Entry; import android.content.Context; import cn.sharesdk.framework.Platform; import cn.sharesdk.framework.ShareSDK; /** * ShareCore是快捷分享的实际出口,此类使用了反射的方式,配合传递进来的HashMap, *构造{@link ShareParams}对象,并执行分享,使快捷分享不再需要考虑目标平台 */ public class ShareCore { private ShareContentCustomizeCallback customizeCallback; /** 设置用于分享过程中,根据不同平台自定义分享内容的回调 */ public void setShareContentCustomizeCallback(ShareContentCustomizeCallback callback) { customizeCallback = callback; } /** * 向指定平台分享内容 * <p> * <b>注意:</b><br> * 参数data的键值需要严格按照{@link ShareParams}不同子类具体字段来命名, *否则无法反射此字段,也无法设置其值。 */ public boolean share(Platform plat, HashMap<String, Object> data) { if (plat == null || data == null) { return false; } Platform.ShareParams sp = null; try { sp = getShareParams(plat, data); } catch(Throwable t) { sp = null; } if (sp != null) { if (customizeCallback != null) { customizeCallback.onShare(plat, sp); } plat.share(sp); } return true; } private Platform.ShareParams getShareParams(Platform plat, HashMap<String, Object> data) throws Throwable { String className = plat.getClass().getName() + "$ShareParams"; Class<?> cls = Class.forName(className); if (cls == null) { return null; } Object sp = cls.newInstance(); if (sp == null) { return null; } for (Entry<String, Object> ent : data.entrySet()) { try { Field fld = cls.getField(ent.getKey()); if (fld != null) { fld.setAccessible(true); fld.set(sp, ent.getValue()); } } catch(Throwable t) {} } return (Platform.ShareParams) sp; } /** 判断指定平台是否使用客户端分享 */ public static boolean isUseClientToShare(Context context, String platform) { if ("Wechat".equals(platform) || "WechatMoments".equals(platform) || "ShortMessage".equals(platform) || "Email".equals(platform) || "GooglePlus".equals(platform) || "QQ".equals(platform) || "Pinterest".equals(platform) || "Instagram".equals(platform)) { return true; } else if ("Evernote".equals(platform)) { Platform plat = ShareSDK.getPlatform(context, platform); if ("true".equals(plat.getDevinfo("ShareByAppClient"))) { return true; } } return false; } /** 判断指定平台是否可以用来授权 */ public static boolean canAuthorize(Context context, String platform) { if ("Wechat".equals(platform) || "WechatMoments".equals(platform) || "ShortMessage".equals(platform) || "Email".equals(platform) || "GooglePlus".equals(platform) || "QQ".equals(platform) || "Pinterest".equals(platform)) { return false; } return true; } }