软件编程
位置:首页>> 软件编程>> Android编程>> Android微信SDK实现分享

Android微信SDK实现分享

作者:shineflowers  发布时间:2021-09-18 17:52:58 

标签: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;
 }
}
}
0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com