Android微信SDK实现分享

 更新时间:2016年12月12日 16:07:50   作者:shineflowers  
这篇文章主要介绍了Android微信SDK实现分享的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

用微信提供的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.util.Log; 
import android.widget.Toast; 
 
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; 
  } 
   
  @Override 
  protected int getShareWay() { 
   return WECHAT_SHARE_WAY_TEXT; 
  } 
 
  @Override 
  protected String getContent() { 
   return content; 
  } 
 
  @Override 
  protected String getTitle() { 
   return null; 
  } 
 
  @Override 
  protected String getURL() { 
   return null; 
  } 
 
  @Override 
  protected 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; 
  } 
   
  @Override 
  protected int getShareWay() { 
   return WECHAT_SHARE_WAY_PICTURE; 
  } 
   
  @Override 
  protected int getPictureResource() { 
   return pictureResource; 
  } 
   
  @Override 
  protected String getContent() { 
   return null; 
  } 
 
  @Override 
  protected String getTitle() { 
   return null; 
  } 
 
  @Override 
  protected 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; 
  } 
   
  @Override 
  protected int getShareWay() { 
   return WECHAT_SHARE_WAY_WEBPAGE; 
  } 
 
  @Override 
  protected String getContent() { 
   return content; 
  } 
 
  @Override 
  protected String getTitle() { 
   return title; 
  } 
 
  @Override 
  protected String getURL() { 
   return url; 
  } 
 
  @Override 
  protected 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; 
  } 
 
  @Override 
  protected int getShareWay() { 
   return WECHAT_SHARE_WAY_VIDEO; 
  } 
 
  @Override 
  protected String getContent() { 
   return null; 
  } 
 
  @Override 
  protected String getTitle() { 
   return null; 
  } 
 
  @Override 
  protected String getURL() { 
   return url; 
  } 
 
  @Override 
  protected 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; 
  //构造一个Req 
  SendMessageToWX.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; 
 
 @Override 
 protected 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); 
 } 
 
 @Override 
 public 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开发设计nowinandroid构建脚本学习

    Android开发设计nowinandroid构建脚本学习

    这篇文章主要为大家介绍了Android开发设计nowinandroid构建脚本学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Android App多个入口的实现方法

    Android App多个入口的实现方法

    这篇文章主要介绍了Android App多个入口的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Android性能优化之Bitmap图片优化详解

    Android性能优化之Bitmap图片优化详解

    在Android项目的imageview中使用大图bitmap时会占据很大的内存,而且在很多时候我们并不需要显示原图那么大的图片, 所以我们需要对图片进行优化,这篇文章主要介绍了Android性能优化之Bitmap图片优化的相关资料,需要的朋友们下面来一起看看吧。
    2017-04-04
  • Android矢量图之VectorDrawable类自由填充色彩

    Android矢量图之VectorDrawable类自由填充色彩

    这篇文章主要介绍了Android矢量图之VectorDrawable类自由填充色彩的相关资料,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Android 键盘开发知识点总结

    Android 键盘开发知识点总结

    这篇文章我们给大家总结了Android 键盘开发的相关知识点内容以及开发心得,有需要的朋友参考学习下。
    2018-06-06
  • Android 媒体开发之MediaPlayer状态机接口方法实例解析

    Android 媒体开发之MediaPlayer状态机接口方法实例解析

    这篇文章主要介绍了Android 媒体开发之MediaPlayer状态机接口方法实例解析,需要的朋友可以参考下
    2017-08-08
  • flutter 自定义websocket路由的实现

    flutter 自定义websocket路由的实现

    这篇文章主要介绍了flutter 自定义websocket路由的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Android实现控件拖动效果

    Android实现控件拖动效果

    这篇文章主要为大家详细介绍了Android实现控件拖动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Android实现屏蔽微信拉黑和删除联系人功能示例

    Android实现屏蔽微信拉黑和删除联系人功能示例

    本篇文章主要介绍了Android实现屏蔽微信拉黑和删除联系人功能示例,具有一定的参考价值,有兴趣的可以了解一下。
    2017-02-02
  • Android控件gridview实现单行多列横向滚动效果

    Android控件gridview实现单行多列横向滚动效果

    这篇文章主要为大家详细介绍了Android控件gridview实现单行多列横向滚动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12

最新评论