一、去各自所在的开发者平台注册相应的Key值;引入相关jar包、权限等

二、ShareUtil工具类

import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;import com.sina.weibo.sdk.api.ImageObject;
import com.sina.weibo.sdk.api.TextObject;
import com.sina.weibo.sdk.api.WeiboMultiMessage;
import com.sina.weibo.sdk.api.share.IWeiboShareAPI;
import com.sina.weibo.sdk.api.share.SendMultiMessageToWeiboRequest;
import com.sina.weibo.sdk.api.share.WeiboShareSDK;
import com.sina.weibo.sdk.auth.AuthInfo;
import com.sina.weibo.sdk.auth.Oauth2AccessToken;
import com.sina.weibo.sdk.auth.WeiboAuthListener;
import com.sina.weibo.sdk.exception.WeiboException;
import com.tencent.connect.share.QQShare;
import com.tencent.mm.sdk.modelmsg.SendMessageToWX;
import com.tencent.mm.sdk.modelmsg.WXMediaMessage;
import com.tencent.mm.sdk.modelmsg.WXWebpageObject;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.WXAPIFactory;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;import java.util.List;import cn.hnshangyu.maker.R;
import cn.hnshangyu.maker.weibo.AccessTokenKeeper;
import cn.hnshangyu.maker.weibo.Constants;/*** ============================================* 文件名:ShareUtil.java* 日期:2016-08-17 14:58* 描述:分享帮助类* 版本:1.0* * ============================================*/
public class ShareUtil {/*** 微博微博分享接口实例*/public static IWeiboShareAPI mWeiboShareAPI;//微信分享public static final String WEIXIN_SHARE_APP_ID = "wx0c********88488d";public static IWXAPI weixin_api;public static final String QQ_APP_ID = "11****5659";public static Tencent mTencent;public static void shareQQ(Activity activity, String sharePath, IUiListener listener) {//qq分享mTencent = Tencent.createInstance(QQ_APP_ID, activity);if (isQQClientAvailable(activity)) {//            String content = activity.getResources().getString(R.string.ivQrcode_content);final Bundle params = new Bundle();params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);params.putString(QQShare.SHARE_TO_QQ_TITLE, "######");params.putString(QQShare.SHARE_TO_QQ_SUMMARY, "#############...");params.putString(QQShare.SHARE_TO_QQ_TARGET_URL, sharePath);
//            params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, "https://www.baidu.com/img/bd_logo1.png");mTencent.shareToQQ(activity, params, listener);} else {UIUtils.showToast(activity, "请检查是否安装最新版QQ!");}}/*** 判断qq是否可用** @param context* @return*/private static boolean isQQClientAvailable(Context context) {final PackageManager packageManager = context.getPackageManager();List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);if (pinfo != null) {for (int i = 0; i < pinfo.size(); i++) {String pn = pinfo.get(i).packageName;if (pn.equals("com.tencent.mobileqq")) {return true;}}}//**如果返回false  qq的轻聊版也会显示安装新版本,true他会自动下载新版本return true;}public static void shareWeiBo(final Activity activity, String sharePath) {//微博mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(activity, Constants.APP_KEY);// 1. 初始化微博的分享消息WeiboMultiMessage weiboMessage = new WeiboMultiMessage();weiboMessage.mediaObject = getImageObj(activity);weiboMessage.textObject = getTextObj(activity, sharePath);SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest();// 用transaction唯一标识一个请求request.transaction = String.valueOf(System.currentTimeMillis());request.multiMessage = weiboMessage;if (mWeiboShareAPI.isWeiboAppInstalled() && mWeiboShareAPI.isWeiboAppSupportAPI()) {mWeiboShareAPI.registerApp();    // 将应用注册到微博客户端// 3. 发送请求消息到微博,唤起微博分享界面mWeiboShareAPI.sendRequest(activity, request);} else {AuthInfo mAuthInfo = new AuthInfo(activity, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE);Oauth2AccessToken accessToken = AccessTokenKeeper.readAccessToken(activity);String token = "";if (accessToken != null) {token = accessToken.getToken();}mWeiboShareAPI.sendRequest(activity, request, mAuthInfo, token, new WeiboAuthListener() {@Overridepublic void onComplete(Bundle bundle) {Oauth2AccessToken newToken = Oauth2AccessToken.parseAccessToken(bundle);AccessTokenKeeper.writeAccessToken(activity, newToken);UIUtils.showToast(activity, "onAuthorizeComplete token = " + newToken.getToken());}@Overridepublic void onWeiboException(WeiboException e) {UIUtils.showToast(activity, "分享出错");}@Overridepublic void onCancel() {UIUtils.showToast(activity, "分享取消");}});}}private static TextObject getTextObj(Activity activity, String sharePath) {TextObject textObject = new TextObject();textObject.text = "##################...@" + sharePath;Bitmap bitmap = BitmapFactory.decodeResource(activity.getResources(), R.mipmap.ic_launcher);textObject.setThumbImage(bitmap);return textObject;}/*** 创建图片消息对象。** @return 图片消息对象。*/private static ImageObject getImageObj(Activity activity) {ImageObject imageObject = new ImageObject();
//        BitmapDrawable bitmapDrawable = (BitmapDrawable) mImageView.getDrawable();//设置缩略图。 注意:最终压缩过的缩略图大小不得超过 32kb。Bitmap bitmap = BitmapFactory.decodeResource(activity.getResources(), R.mipmap.ic_launcher);imageObject.setImageObject(bitmap);return imageObject;}static SendMessageToWX.Req req;private static final int THUMB_SIZE = 150;public static void shareWechatCircle(Activity activity, String sharePath) {if (linkWeiXin(activity, sharePath)) {req.scene = SendMessageToWX.Req.WXSceneTimeline;weixin_api.sendReq(req);}}public static void shareWechat(Activity activity, String sharePath) {if (linkWeiXin(activity, sharePath)) {req.scene = SendMessageToWX.Req.WXSceneSession;weixin_api.sendReq(req);}}//微信分享private static boolean linkWeiXin(Activity activity, String sharePath) {// 通过WXAPIFactory工厂,获取IWXAPI的实例weixin_api = WXAPIFactory.createWXAPI(activity, WEIXIN_SHARE_APP_ID, true);if (weixin_api.isWXAppInstalled() && weixin_api.isWXAppSupportAPI()) {weixin_api.registerApp(WEIXIN_SHARE_APP_ID);WXWebpageObject webpageObject = new WXWebpageObject();webpageObject.webpageUrl = sharePath;WXMediaMessage msg = new WXMediaMessage();msg.mediaObject = webpageObject;Bitmap bitmap = BitmapFactory.decodeResource(activity.getResources(), R.mipmap.ic_launcher);msg.setThumbImage(bitmap);msg.title = "######";msg.description = "###################...";req = new SendMessageToWX.Req();req.transaction = buildTransaction("webpage");req.message = msg;return true;} else {UIUtils.showToast(activity, "请检查是否安装最新版微信!");return false;}}private static String buildTransaction(final String type) {return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();}
}

三、分享界面

import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.ImageView;import com.google.zxing.WriterException;
import com.sina.weibo.sdk.api.share.BaseResponse;
import com.sina.weibo.sdk.api.share.IWeiboHandler;
import com.sina.weibo.sdk.api.share.IWeiboShareAPI;
import com.sina.weibo.sdk.api.share.WeiboShareSDK;
import com.sina.weibo.sdk.constant.WBConstants;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;import butterknife.BindView;
import cn.hnshangyu.maker.R;
import cn.hnshangyu.maker.base.BaseActivity;
import cn.hnshangyu.maker.ui.personal.zxing.EncodingHandler;
import cn.hnshangyu.maker.util.ShareUtil;
import cn.hnshangyu.maker.util.UIUtils;
import cn.hnshangyu.maker.weibo.Constants;public class InviteFriendsActivity extends BaseActivity implements IWeiboHandler.Response {@BindView(R.id.iv_qrcode)ImageView ivQrcode;@BindView(R.id.iv_share_qq)ImageView ivShareQq;@BindView(R.id.iv_share_weibo)ImageView ivShareWeibo;@BindView(R.id.iv_share_weixin)ImageView ivShareWeixin;@BindView(R.id.iv_share_circle_friends)ImageView ivShareCircleFriends;private Bitmap qrcodeBitmap;/*** 微博微博分享接口实例*/private IWeiboShareAPI mWeiboShareAPI = null;//分享链接private String sharePath;@Overrideprotected int getLayoutId() {return R.layout.activity_invite_friends;}@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);// 从当前应用唤起微博并进行分享后,返回到当前应用时,需要在此处调用该函数// 来接收微博客户端返回的数据;执行成功,返回 true,并调用// {@link IWeiboHandler.Response#onResponse};失败返回 false,不调用上述回调mWeiboShareAPI.handleWeiboResponse(intent, this);}/*** 初始化控件(必须实现此方法)*/@Overrideprotected void initView() {sharePath = getResources().getString(R.string.ivQrcode_content);onShowTopBack(false);onShowTitleBack(true);setTitleText(R.string.invite_friends);showQRCode();// 创建微博分享接口实例mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(this, Constants.APP_KEY);// 注册第三方应用到微博客户端中,注册成功后该应用将显示在微博的应用列表中。// 但该附件栏集成分享权限需要合作申请,详情请查看 Demo 提示// NOTE:请务必提前注册,即界面初始化的时候或是应用程序初始化时,进行注册mWeiboShareAPI.registerApp();initListener();}@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 当 Activity 被重新初始化时(该 Activity 处于后台时,可能会由于内存不足被杀掉了),// 需要调用 {@link IWeiboShareAPI#handleWeiboResponse} 来接收微博客户端返回的数据。// 执行成功,返回 true,并调用 {@link IWeiboHandler.Response#onResponse};// 失败返回 false,不调用上述回调if (savedInstanceState != null) {mWeiboShareAPI.handleWeiboResponse(getIntent(), this);}}private void showQRCode() {//生成二维码图片,第一个参数是二维码的内容,第二个参数是正方形图片的边长,单位是像素
//        String content = "http://m.360buyimg.com/mobilecms/s300x98_jfs/t1363/77/1381395719/60705/ce91ad5c/55dd271aN49efd216.jpg";
//        content = getResources().getString(R.string.ivQrcode_content);try {qrcodeBitmap = EncodingHandler.createQRCode(sharePath, 400);ivQrcode.setImageBitmap(qrcodeBitmap);} catch (WriterException e) {e.printStackTrace();}}private void initListener() {ivShareQq.setOnClickListener(this);ivShareWeibo.setOnClickListener(this);ivShareWeixin.setOnClickListener(this);ivShareCircleFriends.setOnClickListener(this);}@Overrideprotected void onInitClick(View v) {super.onInitClick(v);switch (v.getId()) {case R.id.iv_share_qq:ShareUtil.shareQQ(mActivity, sharePath, shareListener);break;case R.id.iv_share_weibo:ShareUtil.shareWeiBo(mActivity, sharePath);break;case R.id.iv_share_weixin:ShareUtil.shareWechat(mActivity, sharePath);break;case R.id.iv_share_circle_friends:ShareUtil.shareWechatCircle(mActivity, sharePath);break;}}@Overridepublic void onResponse(BaseResponse baseResponse) {if (baseResponse != null) {switch (baseResponse.errCode) {case WBConstants.ErrorCode.ERR_OK:UIUtils.showToast(mContext, "分享成功");break;case WBConstants.ErrorCode.ERR_CANCEL:UIUtils.showToast(mContext, "分享取消");break;case WBConstants.ErrorCode.ERR_FAIL:UIUtils.showToast(mContext, "分享失败");break;}}}private IUiListener shareListener = new IUiListener() {@Overridepublic void onComplete(Object o) {UIUtils.showToast(mContext, "分享成功");}@Overridepublic void onError(UiError uiError) {UIUtils.showToast(mContext, "分享出错");}@Overridepublic void onCancel() {}};protected void onActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == com.tencent.connect.common.Constants.REQUEST_QQ_SHARE) {Tencent.onActivityResultData(requestCode, resultCode, data, shareListener);}}
}

四、Constants类

/*** 该类定义了微博授权时所需要的参数。*/
public interface Constants {/*** 当前 应用的 APP_KEY,第三方应用应该使用自己的 APP_KEY 替换该 APP_KEY*/public static final String APP_KEY = "16#####007";/*** 当前 应用的回调页,第三方应用可以使用自己的回调页。* <p/>* <p>* 注:关于授权回调页对移动客户端应用来说对用户是不可见的,所以定义为何种形式都将不影响,* 但是没有定义将无法使用 SDK 认证登录。* 建议使用默认回调页:https://api.weibo.com/oauth2/default.html* </p>*/
//    public static final String REDIRECT_URL = "http://www.sina.com";public static final String REDIRECT_URL = "https://api.weibo.com/oauth2/default.html";/*** Scope 是 OAuth2.0 授权机制中 authorize 接口的一个参数。通过 Scope,平台将开放更多的微博* 核心功能给开发者,同时也加强用户隐私保护,提升了用户体验,用户在新 OAuth2.0 授权页中有权利* 选择赋予应用的功能。* <p/>* 我们通过新浪微博开放平台-->管理中心-->我的应用-->接口管理处,能看到我们目前已有哪些接口的* 使用权限,高级权限需要进行申请。* <p/>* 目前 Scope 支持传入多个 Scope 权限,用逗号分隔。* <p/>* 有关哪些 OpenAPI 需要权限申请,请查看:http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI* 关于 Scope 概念及注意事项,请查看:http://open.weibo.com/wiki/Scope*/public static final String SCOPE ="email,direct_messages_read,direct_messages_write,"+ "friendships_groups_read,friendships_groups_write,statuses_to_me_read,"+ "follow_app_official_microblog," + "invitation_write";
}

微博,微信,微信朋友圈,QQ分享工具类ShareUtil相关推荐

  1. android qq图片分享到朋友圈,Android 调用系统分享文字、图片、文件,可直达微信、朋友圈、QQ、QQ空间、微博...

    转载自:https://www.liangzl.com/get-article-detail-18749.html 兼容SDK 18以上的系统,直接调用系统分享功能,分享文本.图片.文件到第三方APP ...

  2. jQurry实现PC详情页分享到微信、朋友圈、QQ空间、微博

    本文主要实现详情页分享功能,分享到微信.朋友圈.QQ空间.微博,以及打印和收藏功能. 一.效果图 二.相关代码 2.1html <div class="share-wrapper cl ...

  3. Android工具类— 分享到QQ(QQ空间)、微信(朋友圈)

    1.分享到QQ.QQ空间: 首先第一步,在腾讯开发者平台注册,添加应用,获得APPID,然后下载SDK,导入到工程中:然后,在AndroidManifest中注册两个Activity,代码如下: &l ...

  4. uni-app - H5 公众号网页分享到微信朋友圈 / 转发分享给朋友好友 / 分享到手机 QQ / 分享到 QQ 空间,给微信分享卡片设置图标、标题、描述文字等(JS-SDK 通用解决方案放心用)

    前言 如果您是纯 Vue.js 项目(或 Nuxt.js),请访问 Vue - 最新网页 H5 分享到微信朋友圈 / 转发分享好友 这篇详细教程. 目前网上大部分教程都过时了(老版本.无效),并且未对 ...

  5. 使用shareSDK实现微信多图分享到朋友圈Url分享到朋友圈URL分享到好友 问题记录

    问题概述 其实第三方分享很早就有了,这个按理说这个应该没什么难度,为啥记录一下呢,因为项目中同时出现了 朋友圈多图分享(多张URL集合),朋友圈URL分享,群和个人URL,图片分享.基本上涵盖了大部分 ...

  6. android中设置lmargin简书,超详细React Native实现微信好友/朋友圈分享功能-Android/iOS双平台通用...

    (一)前言 本文主要会涉及到以下内容: 微信开发者应用申请审核 安装配置微信分享库 微信好友/朋友圈功能实现 (二)应用申请审核 首先大家需要去微信开发平台去注册账号并且创建一个移动应用.(地址:ht ...

  7. php 微信转发朋友圈,php实现的微信分享到朋友圈并记录分享次数功能的讲解

    这篇文章主要介绍了php实现的微信分享到朋友圈并记录分享次数功能,结合实例形式分析了php微信分享功能接口调用及分享次数统计具体操作技巧,需要的朋友可以参考下 本文实例讲述了php实现的微信分享到朋友 ...

  8. java 记录微信转发次数_微信分享朋友圈记录分享次数统计实现

    业余时间研究微信的接口方法.记录下微信分享朋友圈记录分享次数统计实现:1.引入JS文件 2.通过config接口注入权限验证配置 3.通过ready接口处理成功验证 4.通过error接口处理失败验证 ...

  9. uniApp 自定义分享到微信、朋友圈

    uniapp写app之自定义分享到微信和朋友圈 新建组件share-posters 在项目中index.html文件中引入jWeixin 在父组件中使用 新建组件share-posters uniap ...

最新文章

  1. python好学吗mooc中文网-2020年大学mooc用Python玩转数据作业答案
  2. Openssl 之大数运算函数 BN
  3. 2018.11.16 长难句4
  4. linux文件操作相关函数
  5. python 如何匹配一撇字符_python,yaml如何解析包含撇号的字符串
  6. Vue中的scoped和scoped穿透
  7. 【map分组求和】map集合根据某一key分组,再对某一key对应的所有值求和
  8. [Python] L1-035. 情人节 团体程序设计天梯赛GPLT
  9. Fragment-传递参数
  10. 如何从Mac删除Bing重定向
  11. 终于找到淘口令的坑了
  12. SQLDBX如何连接CACHE!!!
  13. html表格自动分列,CSS3 Columns分列式布局方法简介
  14. 不动产登记+电子签章全程无纸化网上办,零跑腿!
  15. ORA-01119、ORA-27040的两种可能存在的错误
  16. 阿里巴巴内部不传之秘「十亿级并发系统顶级教程」GitHub一夜封神
  17. JSON与fastjson
  18. Class.getEnclosingClass 和 Class.getDeclaringClass
  19. AGC中振幅与dB的转换关系
  20. 中国纺织业漂泊难定,如今向东南亚转移该担心还是惋惜?

热门文章

  1. linux临时脚本,windows 和 linux 清理 临时 文件 的脚本
  2. lxc共享usb设备
  3. struct model in Python
  4. 页面使用$.getJSON只获取一次数据,导致多个请求返回的都是第一个结果
  5. DEBUG命令详解——计算机系统基础
  6. 世间不如意事十之八九
  7. 视频编码中的块效应、振铃效应和呼吸效应分析
  8. 光伏发电尖峰平谷占比的含义解释(光伏发电峰值)
  9. echarts 画流程图
  10. 详解 Pytorch.random