当前位置: 移动技术网 > 移动技术>移动开发>Android > Android微信SDK实现分享

Android微信SDK实现分享

2019年07月24日  | 移动技术网移动技术  | 我要评论

用微信提供的sdk来实现分享:

从下载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; 
  } 
 } 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网