package com.pan.simplepicture.widget; import java.util.Date; import java.util.HashMap; import java.util.Map; import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.pan.simplepicture.ConstantValue; import com.pan.simplepicture.R; import com.umeng.socialize.bean.SHARE_MEDIA; import com.umeng.socialize.bean.SocializeEntity; import com.umeng.socialize.controller.UMServiceFactory; import com.umeng.socialize.controller.UMSocialService; import com.umeng.socialize.controller.listener.SocializeListeners.SnsPostListener; import com.umeng.socialize.sso.QZoneSsoHandler; import com.umeng.socialize.sso.SinaSsoHandler; import com.umeng.socialize.sso.TencentWBSsoHandler; import com.umeng.socialize.sso.UMQQSsoHandler; import com.umeng.socialize.weixin.controller.UMWXHandler; public class ShareDialog extends Dialog { private static int default_width = 160; // 默认宽度 private static int default_height = 120;// 默认高度 private Context mContext; public ShareDialog(Context context, View layout, int style) { super(context, style); mContext = context; } public ShareDialog(Context context, int width, int height) { super(context, R.style.dialog); view = View.inflate(context, R.layout.share_dialog, null); setContentView(view); mContext = context; initSocialSDK(); initPlatformMap(); Window window = getWindow(); WindowManager.LayoutParams params = window.getAttributes(); params.height = height; params.width = width; params.gravity = Gravity.CENTER; window.setAttributes(params); } @Override public void show() { startShare(); super.show(); }; private void startShare() { // TODO Auto-generated method stub if (mOnShareDataListener != null) { mOnShareDataListener.onShareData(mController); } showCustomUI(false); } Map<String, SHARE_MEDIA> mPlatformsMap = new HashMap<String, SHARE_MEDIA>(); private final UMSocialService mController = UMServiceFactory .getUMSocialService("com.umeng.share"); /** * 初始化SDK,添加一些平台 */ private void initSocialSDK() { // 添加QQ平台 UMQQSsoHandler qqHandler = new UMQQSsoHandler((Activity) mContext, ConstantValue.QQ_APPID, ConstantValue.QQ_APPKEY); qqHandler.addToSocialSDK(); // 添加QQ空间平台 QZoneSsoHandler qzoneHandler = new QZoneSsoHandler((Activity) mContext, ConstantValue.QQ_APPID, ConstantValue.QQ_APPKEY); qzoneHandler.addToSocialSDK(); // wx967daebe835fbeac是你在微信开发平台注册应用的AppID, 这里需要替换成你注册的AppID String appID = ConstantValue.WEIXIN_APPID; // 添加微信平台 UMWXHandler wxHandler = new UMWXHandler(mContext, appID); wxHandler.addToSocialSDK(); // 支持微信朋友圈 UMWXHandler wxCircleHandler = new UMWXHandler(mContext, appID); wxCircleHandler.setToCircle(true); wxCircleHandler.addToSocialSDK(); // 设置新浪SSO handler mController.getConfig().setSsoHandler(new SinaSsoHandler()); // 设置腾讯微博SSO handler mController.getConfig().setSsoHandler(new TencentWBSsoHandler()); } private int[] imgs = { R.drawable.wechat_selector, R.drawable.wechatmoment_selector, R.drawable.qq_selector, R.drawable.qzone_selector, R.drawable.sina_selector, R.drawable.tencent_selector }; /** * 初始化平台map */ private void initPlatformMap() { mPlatformsMap.put("微信好友", SHARE_MEDIA.WEIXIN); mPlatformsMap.put("朋友圈", SHARE_MEDIA.WEIXIN_CIRCLE); mPlatformsMap.put("QQ好友", SHARE_MEDIA.QQ); mPlatformsMap.put("QQ空间", SHARE_MEDIA.QZONE); mPlatformsMap.put("新浪微博", SHARE_MEDIA.SINA); mPlatformsMap.put("腾讯微博", SHARE_MEDIA.TENCENT); } /** * 分享监听器 */ SnsPostListener mShareListener = new SnsPostListener() { @Override public void onStart() { Toast.makeText(mContext, "开始分享.", Toast.LENGTH_SHORT).show(); } @Override public void onComplete(SHARE_MEDIA platform, int stCode, SocializeEntity entity) { if (stCode == 200) { Toast.makeText(mContext, "分享成功", Toast.LENGTH_SHORT).show(); } else { String eMsg = ""; if (stCode == -101) { eMsg = "没有授权"; } } } }; String[] strings; private View view; private void showCustomUI(final boolean isDirectShare) { ImageView lightordark = (ImageView) view.findViewById(R.id.lightordark); int hour = new Date().getHours(); if (hour >= 6 && hour < 18) { lightordark.setImageResource(R.drawable.ic_light); } else { lightordark.setImageResource(R.drawable.ic_dark); } GridView gv_share = (GridView) view.findViewById(R.id.gv_share); Button comment_cancle_button = (Button) view .findViewById(R.id.comment_cancle_button); strings = mContext.getResources().getStringArray(R.array.share); gv_share.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { SHARE_MEDIA platform = mPlatformsMap.get(strings[position]); dismiss(); if (isDirectShare) { // 调用直接分享 mController.directShare(mContext, platform, mShareListener); } else { // 调用直接分享, 但是在分享前用户可以编辑要分享的内容 mController.postShare(mContext, platform, mShareListener); } } }); MyAdapter mAdapter = new MyAdapter(); gv_share.setAdapter(mAdapter); comment_cancle_button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); } }); } private class MyAdapter extends BaseAdapter { @Override public int getCount() { return imgs.length; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView != null) { holder = (ViewHolder) convertView.getTag(); } else { holder = new ViewHolder(); convertView = View.inflate(mContext, R.layout.share_item, null); holder.iv_icon = (ImageView) convertView .findViewById(R.id.iv_icon); holder.tv_name = (TextView) convertView .findViewById(R.id.tv_name); convertView.setTag(holder); } holder.iv_icon.setImageResource(imgs[position]); holder.tv_name.setText(strings[position]); return convertView; } } public interface OnShareDataListener { public void onShareData(UMSocialService mController); } private OnShareDataListener mOnShareDataListener; public void setOnShareDataListener(OnShareDataListener mOnShareDataListener) { this.mOnShareDataListener = mOnShareDataListener; } class ViewHolder { ImageView iv_icon; TextView tv_name; } }