用微信提供的SDK来实现分享

从http://open.weixin.qq.com下载Android相关的jar包,将libammsdk.jar加入到项目中。

微信分享的核心类,部分代码如下:

WechatShareManager.java

package com.jackie.umeng.share;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.Toast;import com.sdtjla.nfccylindertools.R;
import com.sdtjla.nfccylindertools.util.Util;
import com.tencent.mm.sdk.modelmsg.SendMessageToWX;
import com.tencent.mm.sdk.modelmsg.WXImageObject;
import com.tencent.mm.sdk.modelmsg.WXMediaMessage;
import com.tencent.mm.sdk.modelmsg.WXTextObject;
import com.tencent.mm.sdk.modelmsg.WXVideoObject;
import com.tencent.mm.sdk.modelmsg.WXWebpageObject;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.WXAPIFactory;/*** 实现微信分享功能的核心类* @author chengcj1**/
public class WechatShareManager {private static final int THUMB_SIZE = 150;public static final int WECHAT_SHARE_WAY_TEXT = 1;   //文字public static final int WECHAT_SHARE_WAY_PICTURE = 2; //图片public static final int WECHAT_SHARE_WAY_WEBPAGE = 3;  //链接public static final int WECHAT_SHARE_WAY_VIDEO = 4; //视频public static final int WECHAT_SHARE_TYPE_TALK = SendMessageToWX.Req.WXSceneSession;  //会话public static final int WECHAT_SHARE_TYPE_FRENDS = SendMessageToWX.Req.WXSceneTimeline; //朋友圈private static WechatShareManager mInstance;private ShareContent mShareContentText, mShareContentPicture, mShareContentWebpag, mShareContentVideo;private IWXAPI mWXApi;private Context mContext;private WechatShareManager(Context context){this.mContext = context;//初始化数据//初始化微信分享代码initWechatShare(context);}/*** 获取WeixinShareManager实例* 非线程安全,请在UI线程中操作* @return*/public static WechatShareManager getInstance(Context context){if(mInstance == null){mInstance = new WechatShareManager(context);}return mInstance;}private void initWechatShare(Context context){if (mWXApi == null) {mWXApi = WXAPIFactory.createWXAPI(context, WechatShareUtil.WECHAT_APP_ID, true);}mWXApi.registerApp(WechatShareUtil.WECHAT_APP_ID);}/*** 通过微信分享* @param shareWay 分享的方式(文本、图片、链接)* @param shareType 分享的类型(朋友圈,会话)*/public void shareByWebchat(ShareContent shareContent, int shareType){switch (shareContent.getShareWay()) {case WECHAT_SHARE_WAY_TEXT:shareText(shareContent, shareType);break;case WECHAT_SHARE_WAY_PICTURE:sharePicture(shareContent, shareType);break;case WECHAT_SHARE_WAY_WEBPAGE:shareWebPage(shareContent, shareType);break;case WECHAT_SHARE_WAY_VIDEO:shareVideo(shareContent, shareType);break;}}private abstract class ShareContent {protected abstract int getShareWay();protected abstract String getContent();protected abstract String getTitle();protected abstract String getURL();protected abstract int getPictureResource();}/*** 设置分享文字的内容* @author chengcj1**/public class ShareContentText extends ShareContent {private String content;/*** 构造分享文字类* @param text 分享的文字内容*/public ShareContentText(String content){this.content = content;}@Overrideprotected int getShareWay() {return WECHAT_SHARE_WAY_TEXT;}@Overrideprotected String getContent() {return content;}@Overrideprotected String getTitle() {return null;}@Overrideprotected String getURL() {return null;}@Overrideprotected int getPictureResource() {return -1;}}/** 获取文本分享对象*/public ShareContent getShareContentText(String content) {if (mShareContentText == null) {mShareContentText = new ShareContentText(content);}return (ShareContentText) mShareContentText;}/*** 设置分享图片的内容* @author chengcj1**/public class ShareContentPicture extends ShareContent {private int pictureResource;public ShareContentPicture(int pictureResource){this.pictureResource = pictureResource;}@Overrideprotected int getShareWay() {return WECHAT_SHARE_WAY_PICTURE;}@Overrideprotected int getPictureResource() {return pictureResource;}@Overrideprotected String getContent() {return null;}@Overrideprotected String getTitle() {return null;}@Overrideprotected String getURL() {return null;}}/** 获取图片分享对象*/public ShareContent getShareContentPicture(int pictureResource) {if (mShareContentPicture == null) {mShareContentPicture = new ShareContentPicture(pictureResource);}return (ShareContentPicture) mShareContentPicture;}/*** 设置分享链接的内容* @author chengcj1**/public class ShareContentWebpage extends ShareContent {private String title;private String content;private String url;private int pictureResource;public ShareContentWebpage(String title, String content, String url, int pictureResource){this.title = title;this.content = content;this.url = url;this.pictureResource = pictureResource;}@Overrideprotected int getShareWay() {return WECHAT_SHARE_WAY_WEBPAGE;}@Overrideprotected String getContent() {return content;}@Overrideprotected String getTitle() {return title;}@Overrideprotected String getURL() {return url;}@Overrideprotected int getPictureResource() {return pictureResource;}}/** 获取网页分享对象*/public ShareContent getShareContentWebpag(String title, String content, String url, int pictureResource) {if (mShareContentWebpag == null) {mShareContentWebpag = new ShareContentWebpage(title, content, url, pictureResource);}return (ShareContentWebpage) mShareContentWebpag;}/*** 设置分享视频的内容* @author chengcj1**/public class ShareContentVideo extends ShareContent {private String url;public ShareContentVideo(String url) {this.url = url;}@Overrideprotected int getShareWay() {return WECHAT_SHARE_WAY_VIDEO;}@Overrideprotected String getContent() {return null;}@Overrideprotected String getTitle() {return null;}@Overrideprotected String getURL() {return url;}@Overrideprotected int getPictureResource() {return -1;}}/** 获取视频分享内容*/public ShareContent getShareContentVideo(String url) {if (mShareContentVideo == null) {mShareContentVideo = new ShareContentVideo(url);}return (ShareContentVideo) mShareContentVideo;}/** 分享文字*/private void shareText(ShareContent shareContent, int shareType) {String text = shareContent.getContent();//初始化一个WXTextObject对象WXTextObject textObj = new WXTextObject();textObj.text = text;//用WXTextObject对象初始化一个WXMediaMessage对象WXMediaMessage msg = new WXMediaMessage();msg.mediaObject = textObj;msg.description = text;//构造一个ReqSendMessageToWX.Req req = new SendMessageToWX.Req();//transaction字段用于唯一标识一个请求req.transaction = buildTransaction("textshare");req.message = msg;//发送的目标场景, 可以选择发送到会话 WXSceneSession 或者朋友圈 WXSceneTimeline。 默认发送到会话。req.scene = shareType;mWXApi.sendReq(req);}/** 分享图片*/private void sharePicture(ShareContent shareContent, int shareType) {Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), shareContent.getPictureResource());WXImageObject imgObj = new WXImageObject(bitmap);WXMediaMessage msg = new WXMediaMessage();msg.mediaObject = imgObj;Bitmap thumbBitmap =  Bitmap.createScaledBitmap(bitmap, THUMB_SIZE, THUMB_SIZE, true);bitmap.recycle();msg.thumbData = Util.bmpToByteArray(thumbBitmap, true);  //设置缩略图SendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = buildTransaction("imgshareappdata");req.message = msg;req.scene = shareType;mWXApi.sendReq(req);}/** 分享链接*/private void shareWebPage(ShareContent shareContent, int shareType) {WXWebpageObject webpage = new WXWebpageObject();webpage.webpageUrl = shareContent.getURL();WXMediaMessage msg = new WXMediaMessage(webpage);msg.title = shareContent.getTitle();msg.description = shareContent.getContent();Bitmap thumb = BitmapFactory.decodeResource(mContext.getResources(), shareContent.getPictureResource());if(thumb == null) {Toast.makeText(mContext, "图片不能为空", Toast.LENGTH_SHORT).show();} else {msg.thumbData = Util.bmpToByteArray(thumb, true);}SendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = buildTransaction("webpage");req.message = msg;req.scene = shareType;mWXApi.sendReq(req);}/** 分享视频*/private void shareVideo(ShareContent shareContent, int shareType) {WXVideoObject video = new WXVideoObject();video.videoUrl = shareContent.getURL();WXMediaMessage msg = new WXMediaMessage(video);msg.title = shareContent.getTitle();msg.description = shareContent.getContent();Bitmap thumb = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.send_music_thumb);
//      BitmapFactory.decodeStream(new URL(video.videoUrl).openStream());/*** 测试过程中会出现这种情况,会有个别手机会出现调不起微信客户端的情况。造成这种情况的原因是微信对缩略图的大小、title、description等参数的大小做了限制,所以有可能是大小超过了默认的范围。* 一般情况下缩略图超出比较常见。Title、description都是文本,一般不会超过。*/Bitmap thumbBitmap =  Bitmap.createScaledBitmap(thumb, THUMB_SIZE, THUMB_SIZE, true);thumb.recycle();msg.thumbData = Util.bmpToByteArray(thumbBitmap, true);SendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = buildTransaction("video");req.message = msg;req.scene =  shareType;mWXApi.sendReq(req);}private String buildTransaction(final String type) {return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();}
}

MainActivity.java


package com.jackie.umeng.share;import com.jackie.umeng.share.WechatShareManager.ShareContentPicture;
import com.jackie.umeng.share.WechatShareManager.ShareContentText;
import com.jackie.umeng.share.WechatShareManager.ShareContentVideo;import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener {private Button mShareText, mSharePicture, mShareVideo;private WechatShareManager mShareManager; private Context mContext;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mShareText = (Button) findViewById(R.id.share_text);mSharePicture = (Button) findViewById(R.id.share_picture);mShareVideo = (Button) findViewById(R.id.share_video);mShareText.setOnClickListener(this);mSharePicture.setOnClickListener(this);mShareVideo.setOnClickListener(this);mContext = this;mShareManager = WechatShareManager.getInstance(mContext);}@Overridepublic void onClick(View v) {if (!isWebchatAvaliable()) {Toast.makeText(mContext, "请先安装微信", Toast.LENGTH_LONG).show();return;}switch (v.getId()) {case R.id.share_text:ShareContentText mShareContentText = (ShareContentText) mShareManager.getShareContentText("微信文本分享");mShareManager.shareByWebchat(mShareContentText, WechatShareManager.WECHAT_SHARE_TYPE_FRENDS);break;case R.id.share_picture:ShareContentPicture mShareContentPicture = (ShareContentPicture) mShareManager.getShareContentPicture(R.drawable.share);mShareManager.shareByWebchat(mShareContentPicture, WechatShareManager.WECHAT_SHARE_TYPE_FRENDS);break;case R.id.share_video:ShareContentVideo mShareContentVideo = (ShareContentVideo) mShareManager.getShareContentVideo("http://baidu.hz.letv.com/kan/agSlT?fr=v.baidu.com/");mShareManager.shareByWebchat(mShareContentVideo, WechatShareManager.WECHAT_SHARE_TYPE_FRENDS);break;default:break;}}private boolean isWebchatAvaliable() {//检测手机上是否安装了微信try {getPackageManager().getPackageInfo("com.tencent.mm", PackageManager.GET_ACTIVITIES);return true;} catch (Exception e) {return false;}}
}

Android微信SDK实现分享相关推荐

  1. android 微信登录与分享集成

    android 微信登录与分享 android微信登录与分享这两个功能是很常用的,尤其是现在微信用户日益剧增,qq虽然很经典但是感觉大多数用来办公 每个写android的小伙伴估计都会写到这个功能,我 ...

  2. Android 微信SDK分享功能中的最全过程步骤分析

    在前面有一章已经分析过怎么用官方的demo分享微信信息了,在这里我就不再多说,其中关于在自己应用分享说得很简单,本文作者也是经过一番折腾才弄成功,为了以后让大家都少走弯路,决定在这里从头到尾介绍怎么在 ...

  3. android在线签名sdk,Android 微信 SDK 签名问题

    因为 Android 的开放性, 可能是出于安全考虑, 微信 SDK 除了核对应用包名外, 还会核对应用签名, 所以调试 Android 时, 需要保证应用签名与提交审核的签名一致. 首先, 应用务必 ...

  4. iOS开发 微信SDK的分享功能

    1.首先下载微信SDK:微信SDK下载地址(更多关于微信SDK信息文档请访问官方网站:微信开放平台) 2.导入微信SDK 将下载下来的SDKExport文件夹导入到工程,其中包含3个核心文件libWe ...

  5. Android微信登录以及分享集成步骤

    准备工作 在应用集成微信登录以及分享之前,我们在微信开放平台必须要个开发者账户 1.注册完之后创建一个移动应用 2.填写对应应用包名以及签名(md5)信息,填写完毕后,会有个审核过程,一般第二天就通过 ...

  6. Android微信App 分享功能调整,Android 微信SDK分享功能(1)

    转于:http://blog.csdn.net/freesonhp/article/details/10296141 ----------------------------------------- ...

  7. 关关于android 微信sdk 分享 图片 到 朋友圈 的问题

    sceneSwitch.setDrawingCacheEnabled(true);//sceneSwitch是一个自定义的VIewBitmap bmp = Bitmap.createBitmap(sc ...

  8. Android 微信 图片无法分享

    最近在做微信分享的功能,图片分享,小程序分享,由于图片的原因,有的图片总是分享不出去.于是对这块进行了一些深入分析 分析过程 1.关于进程间通信 经过查看log日志,发现已经调用了微信的WXEntry ...

  9. Android 微信开发之分享收藏的实现

    一.注册开发者账号 二.创建应用并提交审核 微信开放平台-->管理中心-->创建移动应用 1.根据要求填写基本信息 2.填写平台信息 在填写应用签名的时候,填写的是平台的sha1数字签名, ...

最新文章

  1. MySQL8.0索引新特性:颠覆了我对索引的认知
  2. 开学季,如何用数据保证学生安全?这套方案值得一看
  3. java中的final, finally, finalize的区别
  4. openglshader实现虚拟场景_opengl+shader
  5. Web控件TreeView展开无闪烁的两个解决方法
  6. 算法 从 数中选出_算法可以选出胜出的nba幻想选秀吗
  7. 学plc好还是python好_PLC是学西门子的好还是学三菱的?
  8. codeforces 679A Bear and Prime 100 交互
  9. 力扣401.二进制手表
  10. QTableWidget item设置不可以选中和编辑状态
  11. for、while、do while 3种循环异同点
  12. 动态设置样式 calc计算
  13. 手机闪存速度排行_2020年手机性能排行榜前十
  14. 学习java之前应该先了解哪些知识?
  15. linux分段加载程序_Linux的分段机制
  16. 计算机上装的word怎么卸载,如何彻底删除电脑上的office软件
  17. Failed to obtain JDBC Connection
  18. [计算机视觉] 边缘检测Canny算法原理总结 以及 matlab代码实现
  19. BUG记录——解析程序包出现错误
  20. 离散数学模拟微信红包算法升级版

热门文章

  1. 无线充电线圈绕制注意事项
  2. 华为鸿蒙研发团队负责人,走进华为北研所:EMUI 11 背后的“人因研究”到底是什么?...
  3. DEDE调用指定文章ID
  4. EChat(简易聊天项目)一、登录注册实现
  5. 【计算机基础】03-Word知识
  6. 小米air2se耳机只有一边有声音怎么办_校园场景实测,JEET ONE与小米Air 2se蓝牙耳机哪款更好用?...
  7. 2022普通人做抖音的红利在哪里
  8. 数字温湿度传感器DHT11
  9. python中的date的含义_浅谈python中的dateime
  10. Mybatis动态sql和缓存