Android 实现微信,微博,微信朋友圈,QQ分享的功能

Android 实现微信,微博,微信朋友圈,QQ分享的功能

一、去各自所在的开发者平台注册相应的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() { @Override public void onComplete(Bundle bundle) { Oauth2AccessToken newToken = Oauth2AccessToken.parseAccessToken(bundle); AccessTokenKeeper.writeAccessToken(activity, newToken); UIUtils.showToast(activity, "onAuthorizeComplete token = " + newToken.getToken()); } @Override public void onWeiboException(WeiboException e) { UIUtils.showToast(activity, "分享出错"); } @Override public 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; @Override protected int getLayoutId() { return R.layout.activity_invite_friends; } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); // 从当前应用唤起微博并进行分享后,返回到当前应用时,需要在此处调用该函数 // 来接收微博客户端返回的数据;执行成功,返回 true,并调用 // {@link IWeiboHandler.Response#onResponse};失败返回 false,不调用上述回调 mWeiboShareAPI.handleWeiboResponse(intent, this); } /** * 初始化控件(必须实现此方法) */ @Override protected 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(); } @Override protected 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); } @Override protected 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; } } @Override public 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() { @Override public void onComplete(Object o) { UIUtils.showToast(mContext, "分享成功"); } @Override public void onError(UiError uiError) { UIUtils.showToast(mContext, "分享出错"); } @Override public 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"; }

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

时间: 2024-10-23 15:58:32

Android 实现微信,微博,微信朋友圈,QQ分享的功能的相关文章

Android 实现微信,微博,微信朋友圈,QQ分享的功能_Android

Android 实现微信,微博,微信朋友圈,QQ分享的功能 一.去各自所在的开发者平台注册相应的Key值:引入相关jar包.权限等 二.ShareUtil工具类 import android.app.Activity; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.graphics.Bit

微信朋友圈评论点赞-android 类似微信朋友圈点赞,评论功能怎么实现?

问题描述 android 类似微信朋友圈点赞,评论功能怎么实现? @Override public int getCount() { return 5; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public int getItemViewType(int positio

Android 高仿微信朋友圈拍照上传功能

模仿微信朋友圈发布动态,输入文字支持文字多少高度自增,有一个最小输入框高度,输入文字有限制,不过这些都很easy! 1. PhotoPicker的使用 这是一个支持选择多张图片,点击图片放大,图片之间左右滑动互相切换的库,同时支持图片删除的库,效果类似微信. (1) 添加PhotoPicker的架包 (2) 使用 选择图片:安卓6.0以后需要在代码中添加读写sd卡和相机的权限 当然清单文件中也需要添加的 PhotoPicker.builder() .setPhotoCount(maxPhoto)

Android仿微信朋友圈全文、收起功能的实例代码

前言 一般在社交APP中都有类似朋友圈的功能,其中发表的动态内容很长的时候不可能让它全部显示.这里就需要做一个仿微信朋友圈全文.收起功能来解决该问题.在网上看到一个例子-->http://www.jb51.net/article/105251.htm ,写的很不错,但是有个bug,他这个Demo只有在条目固定的时候才正常,当增加.删除条目的时候会出现全文.收起显示混乱的问题.原因是他使用了固定的position作为key来保存当前显示的状态.这篇文章在他的基础上进行优化. 效果图 具体代码 (详

消息称微信将在朋友圈中加入视频分享功能“微视”

摘要: 有网友爆料,微信将在朋友圈中加入视频分享功能微视.微信用户可以在朋友圈转载短视频链接,而视频可以直接在页面点击查看. 不过,从截图来看,这个微视很明显是个第三方Ap 有网友爆料,微信将在朋友圈中加入视频分享功能"微视".微信用户可以在朋友圈转载短视频链接,而视频可以直接在页面点击查看. 不过,从截图来看,这个微视很明显是个第三方App,而不是微信的一个功能.微信没有理由再去做个单独的App来做短视频. 不过微博用户arale确认了微视是腾讯出的产品,他在微博上称: "

电脑版微信怎么看朋友圈

  1.打开靠谱助手,输入微信点击搜索 2.搜索结果显示后,点击安装 3.安装完成后,点击微信图标启动微信. 4.点击登录按钮来登录您的微信账号即可跟手机微信一样查看朋友圈了

mac版微信怎么看朋友圈

mac版微信怎么看朋友圈   微软雅黑; font-size: 14px; line-height: 28px;">mac版微信跟网页版差不多,都不具备朋友圈功能,mac用户只能静待微信添加该功能咯~

微信官方今天上线了朋友圈屏蔽提醒提醒功能

摘要: 自从微信在朋友圈涉水广告之后,不少人悲观地认为,朋友圈很可能最后沦落为广告圈.不过,微信官方今天上线了朋友圈屏蔽提醒提醒功能,不仅有可能缓解用户备受朋友圈小广告困 自从微信在朋友圈涉水广告之后,不少人悲观地认为,朋友圈很可能最后沦落为广告圈.不过,微信官方今天上线了朋友圈屏蔽提醒提醒功能,不仅有可能缓解用户备受朋友圈小广告困扰的问题,更是在表明自己的态度:虽然我也开始发广告了,但是不代表什么广告都可以发到朋友圈的.这个新功能的应用场景是: 对于朋友圈内发信息过于频繁的用户,尤其是消息中经

微信发公告:域名在朋友圈内分享需要ICP备案

[摘要]<互联网信息服务管理办法>显示,备案的目的就是为了防止在网上从事非法的网站经营活动,从而打击不良互联网信息的传播.12月12日,微信发布公告称,根据互联网管理的相关规定,即日起在微信朋友圈内分享域名,需在2014年12月31日前完成ICP备案,以避免分享频率受到限制.ICP是"Internet,Content,Provider"的简称,意为网络内容服务商.ICP证是网站经营的许可证,根据国家<互联网信息服务管理办法>规定,经营性网站必须办理ICP证,否则